Overview
A reference for the P-code instruction set executed by the Visual Basic 6 runtime (MSVBVM60.DLL 6.00.8268).
It is generated from vbpcode.db, reference revision 1.007. Every dispatch slot is listed with its encoding, behaviour,
the VB6 source that makes the compiler emit it, and the evidence behind each claim.
Instruction encoding
A P-code procedure is a byte stream interpreted by MSVBVM60's dispatcher, which works on an evaluation stack, the procedure frame (addressed by signed offsets from EBP) and a constant pool attached to the procedure.
- The first byte indexes the primary table (table 0, 256 entries).
- Bytes
FB–FFin table 0 are lead bytes: they select tables 1–5, and the next byte is the index into that table. An opcode is therefore written(table, index); for example(4,0x64) ForI4is encodedFE 64. - Operands follow inline, little-endian. The DB's
sizecolumn counts the index byte plus operand bytes but not the lead byte, so the instruction length issizein table 0 andsize+1in tables 1–5. A size of-1/-2marks a variable-length operand block whose first word is its byte count. - Branch targets are 16-bit offsets from the start of the procedure's P-code.
- Frame operands (
%a) are signed 16-bit offsets from EBP: negative values are locals and temporaries (vbdec showsvar_XX), positive values are arguments (arg_XX). - The interpreter keeps a cached object/structure pointer, written
pr([ebp-4Ch]). FLdPr, FLdPrThis, AryLdPr, LdPrVar and NewIfNull* load it, and the Mem* opcodes address fields relative to it.
Operand markers
vbdec printf-style templates describe operands with these markers:
| Marker | Category | Bytes | Meaning |
|---|---|---|---|
%! | literal_single | 4 | 4-byte single literal |
%1 | immediate_byte | 1 | 1-byte immediate |
%2 | immediate_word | 2 | 2-byte immediate (integer) |
%4 | immediate_dword | 4 | 4-byte immediate (long) |
%C | literal_currency | 8 | 8-byte currency literal |
%D | literal_double | 8 | 8-byte double literal |
%E | pool_pcode_proc_off | var. | same as %e but adds arg2 offset |
%G | guid_extract | var. | extract GUID variant (see CastAd %G) |
%L | branch_target_no_loc | 2 | local jump target, no loc_xx label added |
%a | local_var_ref | 2 | argument/local reference, esp-xx offset |
%c | pool_proc_or_global | 2 | const pool: proc address or global var address |
%d | literal_date_word | var. | date literal |
%e | pool_pcode_proc | var. | read offset from pool as pcode proc to call |
%g | guid_extract | var. | extract GUID from operand stream |
%l | branch_target_local | 2 | local jump target, adds label reference |
%r | vt_type_byte | 1 | VT type byte for variant typing |
%s | pool_string | 2 | string from const pool offset |
%t | code_object_ref | 2 | code object by base offset (GUID fallback) |
%v | vtable_call | 4 | 2-byte vtable offset + 2-byte pool GUID index |
%x | pool_external_api | 2 | external API call resolved from pool index |
%y | safearray_flags | var. | SafeArray flag decoder |
%z | guid_property_lookup | var. | GUID from pool, call getProperty for lookup |
%} | eop_marker | 0 | end of procedure marker (display only) |
Handlers and duplicate slots
The six dispatch tables define 1165 slots, but many slots point at the same machine-code handler. After grouping by handler address, there are 775 distinct opcodes. In each group one slot is the primary, chosen in this order: emitted by the compiler, then most corpus hits, then marked primary in modOpcodes, then table 0 first. The other 390 slots are marked dup and point to it.
| Slots sharing one handler | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Handler groups | 498 | 201 | 56 | 7 | 10 | 2 | 1 |
A shared handler means the slots behave identically at runtime. It does not always mean they are interchangeable at compile time. In 22 groups the compiler deliberately emits different slots depending on the source type (Integer vs Long `Xor`, Single vs Double `CBool`, …), so the slot still carries type information that is useful to a decompiler. Each entry's notes list these selections. Groups whose slots carry different names:
| Handler | Slots | Names |
|---|---|---|
| #232 | (0,EB),(2,24),(2,25),(2,2C),(2,2D),(2,3C),(2,3D) | CR8I2,FnCSngI2 |
| #10 | (0,0B),(0,5E),(4,21),(4,22),(4,27),(4,28) | ImpAdCallI2,ImpAdCallI4 |
| #105 | (0,6C),(2,E2),(2,E3),(2,E7),(2,E8),(3,1C) | ILdRf,FLdR4 |
| #14 | (0,0F),(4,11),(4,12),(4,17),(4,18) | VCallAd,VCallStr |
| #16 | (0,11),(4,09),(4,0A),(4,0C),(5,2C) | ThisVCallFPR8,ThisVCallHidden |
| #17 | (0,12),(4,01),(4,02),(4,07),(4,08) | ThisVCallAd,ThisVCallI2 |
| #19 | (0,14),(2,CE),(2,D3),(2,D4),(2,D5) | ExitProcI4,ExitProcStr |
| #115 | (0,76),(3,A2),(3,A3),(3,A7),(3,A8) | ImpAdLdI4,ImpAdLdStr |
| #135 | (0,8A),(3,72),(3,73),(3,77),(3,78) | MemLdStr,MemLdR4 |
| #193 | (0,C4),(1,21),(1,22),(1,23) | AndI4,AndUI1 |
| #194 | (0,C5),(1,19),(1,1A),(1,1B) | OrI4,OrI2 |
| #65 | (0,42),(2,2A),(2,32) | CR4Var,CR8Var |
| #102 | (0,69),(4,7C),(4,84) | NextStepR8,NextR8 |
| #121 | (0,7C),(3,B4),(3,B5) | ImpAdStCy,ImpAdStR8 |
| #140 | (0,8F),(3,82),(3,83) | MemStI4,MemStR4 |
| #141 | (0,90),(3,84),(3,85) | MemStR8,MemStCy |
Naming conventions
| Part | Meaning |
|---|---|
F | Frame slot: a local, temporary or ByVal argument addressed by %a. |
I | Indirect: the frame slot holds a pointer, usually a ByRef argument. |
Mem | Field at an offset from the cached pointer pr (class members, Static locals, multi-dimensional array elements). |
FMem | Field at an offset from a pointer held in a frame slot (ActiveX DLL/EXE per-thread module variables; fields of ByRef UDT parameters). |
ImpAd | Absolute address taken from the constant pool (Standard-EXE module variables; calls to imports and procedures). |
WMem/IWMem | Field relative to dispatcher argument 3 ([ebp+10h]). The compiler was never observed emitting these. |
Ld/St | Load (push) / store (pop). |
UI1 I2 I4 | Byte / Integer-Boolean / Long. |
R4 R8 (in Ld/St names) | Raw 4/8-byte move. The compiler uses R4 for Long and R8 for Currency, not for floating point. |
FPR4 FPR8 | Single / Double-Date moved through the FPU. |
R4 R8 (in arithmetic/compare names) | Floating-point operation. Single arithmetic still compiles to the R8 forms. |
Cy Str Var Ad Pr Rf | Currency / String (BSTR) / Variant / object reference / object pointer into pr / address (reference). |
Copy, Func, NoPop, Unk | Copy the value rather than move it / value comes from a call (adopt, no extra AddRef) / leave the value on the stack / VT_UNKNOWN rather than VT_DISPATCH. |
Var suffix on operators | Variant operation; %a names the temporary that receives the result. …VarBool pushes a plain Boolean for conditions. |
Text | Comparison under Option Compare Text. |
Findings from compiler probes
**1. CStr slots (1,FC) and (1,FD) appear swapped
CStr(<Byte>)emits (1,0xFC), which is labeledCStrI2.CStr(<Integer>)emits (1,0xFD), which is labeledCStrUI1.
The rest of the run lines up with its source type: FE=I4, FF=R4, (2,00)=R8, (2,01)=Cy. Probes: op\1_FC_CStrI2, op\1_FD_CStrUI1.
**2. Sixteen alias groups have more than one compiler-emitted slot
Phase 3b showed that these slots share a handler. The compiler still picks between them by source type, so the shared name hides a real compile-time distinction:
| Slots | Label | What selects each slot |
|---|---|---|
| (1,0A) / (1,0B) | EqvI4 | Integer/Boolean operands / Long, Single, Double, Currency, Date, String |
| (1,02) / (1,03) | ImpI4 | same split as Eqv |
| (1,11) / (1,12) / (1,13) | XorI4 | Byte / Integer, Boolean / Long and wider |
| (2,50) / (2,51) | CBoolUI1 | CBool(Byte) / CBool(Integer) (Integer arithmetic on Booleans too) |
| (2,53) / (2,54) | CBoolR4 | CBool(Single) / CBool(Double or Date) |
| (2,0F) / (2,10) | CUI1R4 | CByte(Single) / CByte(Double) |
| (2,3A) / (2,3B) | FnCDblR8 | CDbl(Single) / CDbl(Double) |
| (1,DE) / (1,DF) | FnFixR8 | Fix(Single) / Fix(Double, Date, String) |
| (1,E6) / (1,E7) | FnIntR8 | Int(Single) / Int(Double, Date, String) |
| (1,87) / (1,88) | BetweenR4 | Case a To b on Single / on Double or Date |
| (2,4E) / (2,4F) | FnCDateVar | explicit CDate(v) / implicit Variant→Date coercion |
| (4,7E) / (4,86) | NextStepVar | Variant For with no Step / with Step |
| (3,CB) / (3,CC) / (3,CD) | ExitForCollObj | For Each control variable is Variant / Object / a specific class |
| (0,0E) / (5,2B) | VCallFPR8 | see finding 5 |
| (0,3E) / (0,51) | FLdZeroAd | both are emitted, in different object-type contexts |
| (0,59) / (3,C7) | PopTmpLdAdStr | (3,C7) appears for fixed-length string temporaries |
Each slot's source_gen shows the source construct that selects it. This looks like strong evidence for renaming the second slot in several groups, for example EqvI2/EqvI4, CBoolI2, CBoolR8, and CUI1R8. Renaming is David's decision, so no mnemonics were changed.
**3. Single-precision math reuses the R8 (FPU) opcodes
Single + Single emits AddR8. The same holds for SubR8, MulR8, DivR8, UMiR8, EqR8, LtR8, NeR8, GeR8, GtR8, and LeR8. The *R4 arithmetic and compare slots (AddR4, MulR4, UMiR4, LtR4, NeR4, and so on) were never emitted.
**4. Old-style Print, Input, and Write item opcodes are never emitted
Print #and formPrintcompile to onePrintFile(5,0E) orPrintObject(5,0D) with a descriptor.Input #compiles toInputFile(5,10), andWrite #toWriteFile(5,0F).
None of the following came out of any variant: PrintChan/PrintComma/PrintNL/PrintItem*/PrintSpc/PrintTab/PrintObj, Input/InputDone/InputItem*, and WriteChan. They look like a legacy encoding that this compiler doesn't use.
**5. Typed (non-HRESULT) vtable calls use three slots only
A type library was built for this (probes\_tlb\probetlb.idl). Its ITyped interface has methods that return each type directly. The compiler emitted:
VCallAd(0,0F) for I2, I4, Bool, and Str returnsVCallUI1(4,10) for Byte returnsVCallFPR8(0,0E) for Single and Double returns- (5,2B), the second
VCallFPR8slot, for Currency returns - (0,0E) also for calls whose result is discarded (e.g.
o.GetI2 3)
VCallI2, VCallR4, VCallR8, VCallStr, VCallCy, VCallCbFrame, and every typed ThisVCall* were never emitted. The probes included 34 Me-qualified Form intrinsics (Me.TextWidth, Me.hWnd, Me.Left, ...), and none of them produced a typed ThisVCall*.
**6. Literal slots
- (0,FA), labeled
LitDate, is emitted for plain Double literals (c = 2.5) as well as dates. - (0,F6), labeled
LitCy, carries Currency literals. It also carries raw double bytes when a Double literal is passed ByVal or appears in aPrint #list.
This suggests FA means "8-byte literal pushed to the FPU" and F6 means "8-byte literal pushed raw onto the stack". vbdec's display then decodes F6 as Currency even when it isn't. Handler confirmation is still needed.
**7. W/IW prefix: still never emitted
None of the 64 WMem* or IWMem* slots appeared in any probe. The following contexts were tried:
- Static locals in class, form, and module procedures, and
Static Sub - Class, form, and module UDT members, including
With Withon local, global, array-element, parameter, static, and public-module UDTs- WithEvents sinks and
Implements - ActiveX DLL and ActiveX EXE module globals of every type
DLL globals turned out to compile to **FMem***, which goes through [this+off] on the per-thread data block. So FMem is the TLS route, and it is not what the W prefix means. The [ebp+10h] base therefore still has no known source construct. It may only be reachable from the IDE or from p-code produced by a different compiler version.
**7b. W/IW and special project types (round 4)
David suggested that W/IW might belong to particular project types. Round 4 put the same body (members of every type, statics, With on a member UDT, host implicit members) into each of these:
- a UserControl, in an OCX and in an EXE
- a PropertyPage
- an ActiveX Document, as a DLL and as an EXE
- an Add-in (Connect designer plus form)
- a DHTML Application (HTMLPage designer)
- a DataReport designer
The same body was also put in a plain class, a DLL class, and a form as controls. No W/IW opcode appeared in any of them.
Member, static, and With access compiled to the same opcodes as in a plain class. The only differences came from reaching the host object:
MemLdPr(0,58): the module's self-reference at[pr+0x10], e.g.UserControl.WidthorUserDocument.Width. Now probed.ILdPr(0,48): a method call on a ByRef object parameter (Sub P(c As Collection): n = c.Count). It showed up throughAsyncReadComplete(AsyncProp As AsyncProperty). Ordinary ByVal object parameters are copied to a local first and useFLdPr. Now probed.
The IIS Application (WebClass) remains untested. Its designer refuses to compile unless IIS or Peer Web Services 3.0+ is installed on this machine.
**8. Other compile-time observations
(0,E7), labeledCI4UI1, is emitted forCLng(Integer)andCLng(Boolean), which is I2→I4. Assigning an integer literal to a Byte emits(2,0D)CUI1I2first.Debug.AssertandDebug.Printare stripped from the compiled exe, soAssert(5,0B) cannot be probed this way.- Records in Variants need a public UDT. Using the typelib's
TPubRec, or a public class UDT in an ActiveX DLL, producedCVarUdt,CVarRefUdt,StUdtVar,RedimVarUdt,RedimPreserveVarUdt,CDargRefUdt, andExitProcFrameCbHresult. - IUnknown-typed function returns stored into Variants produce the
*VarUnkand*VarUnkFuncstores:FStVarUnkFunc,Ary1StVarUnk,Ary1StVargUnk,MemStVarUnk,ImpAdStVarUnk[Func],FMemStVarUnkFunc, andIStDargUnkFunc.
---
Method and confidence
- Static tables (mnemonics, templates, sizes, handler addresses) come from vbdec's
modOpcodes.basand the MSVBVM60 dispatch tables. - Handler identity was resolved with IDA/idalib against MSVBVM60.DLL 6.00.8268 (Phase 3).
- Compiler probes (Phase 4): about 3,070 small VB6 programs were compiled as P-code with VB6 SP6 and disassembled with vbdec.
Every emitted slot has a minimal program, kept in
probes\op\, that is proven to produce it. not emitted means no tested construct produced the slot; it does not prove the slot is unreachable. - Descriptions are drafts written by AI agents and are not yet reviewed (
status=draft). 0 drafts are marked needs revision because probe evidence contradicts them; the correction appears in their notes. - Each existing example in
vb6_source_eqwas compiled and checked. The result is shown as "example check" in the entry's notes.
About
This reference was created by David Zimmer (sandsprite.com), working with Claude (Anthropic).
On the shoulders of others
None of this starts from zero. This reference stands on the shoulders of several generations of VB reversers, who mapped the runtime, the file format and the P-code engine long before AI tools existed, and who shared what they found.
Credits include the VB Decompiling community, Sarge, Napalm, VbGamer45, Mr. Unleaded, Moogman, _aLfa_, Alex Ionescu, Warning, josephCo, Darker, Trick, Firehacker, dodi, sysenter-eip and others.
Special thanks go out to:
- VbGamer45 for his work on Semi VB Decompiler
- Mr. Unleaded for allowing the old forums to be rebuilt
- Mr Silver and Mr Snow for their excellent work on the WKTVBDebugger
- Darker for his excellent work on p32Dasm
- Reginald Wong for his vb.idc script
- The OG wizards who created VB6
How it was built
The starting point was the opcode table in vbdec, the VB6 disassembler and decompiler: mnemonics, operand templates, instruction sizes and the dispatch-table address of every slot. That table was loaded into a SQLite database. AI agents then filled it in phase by phase, and each phase was handed off through written briefs and a running lessons-learned file.
Handler-level analysis was done in IDA Pro against MSVBVM60.DLL 6.00.8268, with Claude driving IDA through mrexodia's IDA MCP server (ida-pro-mcp) and idalib. Every dispatch slot was resolved to the machine code that executes it. That is how the 1,165 slots were reduced to 775 distinct handlers, how the aliases were classified, and how the operand sizes were checked.
Runtime evidence came from vbdec itself. With remote scripting enabled, vbdec publishes its live object model on the Windows Running Object Table, so an agent can open a binary and read every procedure's disassembly from a script. Claude used this first to sweep a real P-code application (PDFStreamDumper) for opcode usage, then as the disassembler in an automated test loop.
That loop is what verifies the source examples in this reference. Claude generated a few thousand small VB6 programs, compiled each one to P-code with the VB6 compiler from the command line, disassembled the result in vbdec, and recorded which opcodes each program produced. For every opcode the compiler emits, the smallest such program was then reduced line by line to the minimal source that still produces it. Description examples were compiled the same way, which is how incorrect drafts were found and fixed.
Two companion kits describe the setup in detail and are meant for anyone repeating this work with an AI agent:
- vbdec AI (the vbdec operator briefing and object-model prototypes): how an agent connects to vbdec over the ROT and reads projects, procedures and disassembly, with example tasks such as call graphs and SQL export.
- VB6 AI compile help (
vbai_compile_help): how an agent builds VB6 projects headlessly, covering CRLF/ANSI source files,/makewith error logs, line-number mapping, the elevation rules for OCX projects, and test-harness templates.
The descriptions are AI-written drafts that have not yet been reviewed. Treat the probe evidence and the verified source on each entry as the primary record.
Opcodes by data type
Every slot grouped by the kind of value it works on. Casts are grouped together under Conversion, with the source and target types in the detail column. Within a group, rows are sorted by operation, then mnemonic. dup marks a duplicate slot, and emitted marks slots the VB6 compiler is known to produce.
String 73 slots, 56 distinct handlers, 49 emitted
BSTR operations: concatenation, Mid/Len/InStr/StrComp, fixed-length String handling and String loads/stores.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (1,8B) | BetweenStr | Compare | String | emitted | Case lo To hi range test on a String selector; push Boolean. |
| (1,8D) | BetweenTextStr | Compare | String (text compare) | emitted | Case lo To hi range test on a String selector; push Boolean. |
| (1,30) | EqStr | Compare | String | emitted | Compare two values with =; push Boolean result. |
| (1,32) | EqTextStr | Compare | String (text compare) | emitted | Compare two values with =; push Boolean result. |
| (1,57) | GeStr | Compare | String | emitted | Compare two values with >=; push Boolean result. |
| (1,59) | GeTextStr | Compare | String (text compare) | emitted | Compare two values with >=; push Boolean result. |
| (1,71) | GtStr | Compare | String | emitted | Compare two values with >; push Boolean result. |
| (1,73) | GtTextStr | Compare | String (text compare) | emitted | Compare two values with >; push Boolean result. |
| (1,4A) | LeStr | Compare | String | emitted | Compare two values with <=; push Boolean result. |
| (1,4C) | LeTextStr | Compare | String (text compare) | emitted | Compare two values with <=; push Boolean result. |
| (1,7E) | LikeStr | Compare | String | emitted | Pop two strings; push True if the first matches the pattern in the second. |
| (1,80) | LikeTextStr | Compare | String (text compare) | emitted | Like between two Strings under Option Compare Text; push Boolean. |
| (1,64) | LtStr | Compare | String | emitted | Compare two values with <; push Boolean result. |
| (1,66) | LtTextStr | Compare | String (text compare) | emitted | Compare two values with <; push Boolean result. |
| (1,3D) | NeStr | Compare | String | emitted | Compare two values with <>; push Boolean result. |
| (1,3F) | NeTextStr | Compare | String (text compare) | emitted | Compare two values with <>; push Boolean result. |
| (0,1B) | LitStr | Literal | String | emitted | Push a BSTR literal from the const pool. |
| (4,BF) | LitStr | Literal | String | never dup | Push a BSTR literal from the const pool. |
| (3,A2) | ImpAdLdStr | Load | String, global | never dup | Load Long from a module-level (global) variable. |
| (3,A3) | ImpAdLdStr | Load | String, global | never dup | Load Long from a module-level (global) variable. |
| (3,A7) | ImpAdLdStr | Load | String, global | never dup | Load Long from a module-level (global) variable. |
| (3,A8) | ImpAdLdStr | Load | String, global | never dup | Load Long from a module-level (global) variable. |
| (0,8A) | MemLdStr | Load | String, member via pr | emitted | Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack. |
| (4,D2) | WMemLdStr | Load | String, W-base | never | LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)). |
| (4,D3) | WMemLdStr | Load | String, W-base | never dup | LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)). |
| (4,D7) | WMemLdStr | Load | String, W-base | never dup | LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)). |
| (4,D8) | WMemLdStr | Load | String, W-base | never dup | LOAD a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)). |
| (4,93) | FDupStr | Other | never | ||
| (3,E7) | FMemStStr | Store | String, via frame pointer | emitted | Store String into a field reached through a pointer held in a frame slot. |
| (0,54) | FMemStStrCopy | Store | String, via frame pointer | emitted | Store a value of suffix ` via [frame[%a] + offset] (FMemStStrCopy`). |
| (3,F1) | FMemStStrCopy | Store | String, via frame pointer | never dup | Store a value of suffix ` via [frame[%a] + offset] (FMemStStrCopy`). |
| (0,31) | FStStr | Store | String, frame | emitted | Pop a BSTR (VB6 String); store into frame slot [ebp+%a]. |
| (2,F7) | FStStr | Store | String, frame | never dup | Pop a BSTR (VB6 String); store into frame slot [ebp+%a]. |
| (0,43) | FStStrCopy | Store | String, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,01) | FStStrCopy | Store | String, frame | never dup | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (0,23) | FStStrNoPop | Store | String, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,64) | FStStrNoPop | Store | String, frame | never dup | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,27) | IStStr | Store | String, ByRef/indirect | emitted | Pop value and address; write the BSTR (VB6 String) through the address. |
| (3,31) | IStStrCopy | Store | String, ByRef/indirect | emitted | Pop value and address; write the value of suffix `` through the address. |
| (3,57) | IWMemStStr | Store | String, W-base indirect | never | STORE through a BSTR pointer (VB6 String) at [W-base+offset] -> [eax], one extra dereference (4-byte (pointer), W+indirect). |
| (3,61) | IWMemStStrCopy | Store | String, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,B7) | ImpAdStStr | Store | String, global | emitted | Store String into a module-level (global) variable. |
| (3,C1) | ImpAdStStrCopy | Store | String, global | emitted | Store String (copied) into a module-level (global) variable. |
| (3,87) | MemStStr | Store | String, member via pr | never | |
| (3,91) | MemStStrCopy | Store | String, member via pr | emitted | Store a value of suffix ` into [pr + offset]` (pr on the stack). |
| (4,E7) | WMemStStr | Store | String, W-base | never | STORE a BSTR pointer (VB6 String) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (pointer)). |
| (4,F1) | WMemStStrCopy | Store | String, W-base | never | STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size). |
| (0,2A) | ConcatStr | String function | String/Variant | emitted | Concatenate the top two BSTR (VB6 String)s; push the result. |
| (1,F0) | ConcatStr | String function | String/Variant | never dup | (alias) Concatenate the top two BSTR (VB6 String)s; push the result. |
| (1,EF) | ConcatVar | String function | String/Variant | emitted | Concatenate (&) where at least one operand is a Variant; result Variant in a temporary. |
| (4,FD) | FnInStr4 | String function | String/Variant | emitted | String built-in: FnInStr4. |
| (4,FE) | FnInStr4Var | String function | String/Variant | emitted | String built-in: FnInStr4Var. |
| (4,FB) | FnInStrB4 | String function | String/Variant | emitted | String built-in: FnInStrB4. |
| (4,FC) | FnInStrB4Var | String function | String/Variant | emitted | InStrB with Variant operands; push the Variant result. |
| (1,EE) | FnLenBStr | String function | String/Variant | emitted | String built-in: FnLenBStr. |
| (1,ED) | FnLenBVar | String function | String/Variant | emitted | LenB() of a Variant; push the Variant result. |
| (0,4A) | FnLenStr | String function | String/Variant | emitted | String built-in: FnLenStr. |
| (1,EC) | FnLenStr | String function | String/Variant | never dup | (alias) String built-in: FnLenStr. |
| (1,EB) | FnLenVar | String function | String/Variant | emitted | String built-in: FnLenVar. |
| (4,FF) | FnStrComp3 | String function | String/Variant | emitted | String built-in: FnStrComp3. |
| (5,00) | FnStrComp3Var | String function | String/Variant | emitted | StrComp(a, b, compare) with Variant operands; push the Variant result. |
| (0,33) | LdFixedStr | String function | fixed-length String | emitted | Load a fixed-length String as a normal (variable-length) String. |
| (4,61) | LdFixedStr | String function | fixed-length String | never dup | Load a fixed-length String as a normal (variable-length) String. |
| (2,BC) | MidBStr | String function | String/Variant | never dup | Mid statement: replace characters inside a String variable. |
| (2,BE) | MidBStrB | String function | String/Variant | emitted | MidB statement: replace bytes inside a String variable. |
| (2,BD) | MidBVar | String function | String/Variant | emitted | String built-in: MidBVar. |
| (0,4F) | MidStr | String function | String/Variant | emitted | Mid statement: replace characters inside a String variable. |
| (2,BB) | MidVar | String function | String/Variant | emitted | String built-in: MidVar. |
| (0,47) | StFixedStr | String function | fixed-length String | emitted | Fixed-length string operation (StFixedStr). |
| (4,0F) | StFixedStrFree | String function | fixed-length String | emitted | Store a String temporary into a fixed-length String and free the temporary. |
| (4,1E) | StFixedStrR | String function | fixed-length String | emitted | RSet into a fixed-length String. |
| (4,1F) | StFixedStrRFree | String function | fixed-length String | emitted | RSet into a fixed-length String from a temporary, then free the temporary. |
| (4,0E) | StLsetFixStr | String function | fixed-length String | never dup | Fixed-length string operation (StFixedStr). |
Integer 196 slots, 103 distinct handlers, 96 emitted
Byte, Integer/Boolean and Long values: arithmetic, logic, compares, loads/stores (including the raw 4-byte R4 moves used for Long) and integer For loops.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (0,A9) | AddI2 | Arithmetic | Integer/Boolean | emitted | Pop two 16-bit signed integer (VB6 Integer) values; push their addition result. |
| (1,8F) | AddI2 | Arithmetic | Integer/Boolean | never dup | (alias) Pop two 16-bit signed integer (VB6 Integer) values; push their addition result. |
| (0,AA) | AddI4 | Arithmetic | Long | emitted | Pop two 32-bit signed integer (VB6 Long) values; push their addition result. |
| (1,90) | AddI4 | Arithmetic | Long | never dup | (alias) Pop two 32-bit signed integer (VB6 Long) values; push their addition result. |
| (1,8E) | AddUI1 | Arithmetic | Byte | emitted | Pop two 8-bit unsigned integer (VB6 Byte) values; push their addition result. |
| (0,BF) | IDvI2 | Arithmetic | Integer/Boolean | emitted | Pop two 16-bit signed integer (VB6 Integer) values; push their integer division (truncated) result. |
| (1,A7) | IDvI2 | Arithmetic | Integer/Boolean | never dup | (alias) Pop two 16-bit signed integer (VB6 Integer) values; push their integer division (truncated) result. |
| (0,C0) | IDvI4 | Arithmetic | Long | emitted | Pop two 32-bit signed integer (VB6 Long) values; push their integer division (truncated) result. |
| (1,A8) | IDvI4 | Arithmetic | Long | never dup | (alias) Pop two 32-bit signed integer (VB6 Long) values; push their integer division (truncated) result. |
| (1,A6) | IDvUI1 | Arithmetic | Byte | emitted | Pop two 8-bit unsigned integer (VB6 Byte) values; push their integer division (truncated) result. |
| (0,C1) | ModI2 | Arithmetic | Integer/Boolean | emitted | Pop two 16-bit signed integer (VB6 Integer) values; push their modulo result. |
| (1,9F) | ModI2 | Arithmetic | Integer/Boolean | never dup | (alias) Pop two 16-bit signed integer (VB6 Integer) values; push their modulo result. |
| (0,C2) | ModI4 | Arithmetic | Long | emitted | Pop two 32-bit signed integer (VB6 Long) values; push their modulo result. |
| (1,A0) | ModI4 | Arithmetic | Long | never dup | (alias) Pop two 32-bit signed integer (VB6 Long) values; push their modulo result. |
| (1,9E) | ModUI1 | Arithmetic | Byte | emitted | Pop two 8-bit unsigned integer (VB6 Byte) values; push their modulo result. |
| (0,B1) | MulI2 | Arithmetic | Integer/Boolean | emitted | Pop two 16-bit signed integer (VB6 Integer) values; push their multiplication result. |
| (1,AF) | MulI2 | Arithmetic | Integer/Boolean | never dup | (alias) Pop two 16-bit signed integer (VB6 Integer) values; push their multiplication result. |
| (0,B2) | MulI4 | Arithmetic | Long | emitted | Pop two 32-bit signed integer (VB6 Long) values; push their multiplication result. |
| (1,B0) | MulI4 | Arithmetic | Long | never dup | (alias) Pop two 32-bit signed integer (VB6 Long) values; push their multiplication result. |
| (1,AE) | MulUI1 | Arithmetic | Byte | emitted | Pop two 8-bit unsigned integer (VB6 Byte) values; push their multiplication result. |
| (0,AD) | SubI2 | Arithmetic | Integer/Boolean | emitted | Pop two 16-bit signed integer (VB6 Integer) values; push their subtraction result. |
| (1,97) | SubI2 | Arithmetic | Integer/Boolean | never dup | (alias) Pop two 16-bit signed integer (VB6 Integer) values; push their subtraction result. |
| (0,AE) | SubI4 | Arithmetic | Long | emitted | Pop two 32-bit signed integer (VB6 Long) values; push their subtraction result. |
| (1,98) | SubI4 | Arithmetic | Long | never dup | (alias) Pop two 32-bit signed integer (VB6 Long) values; push their subtraction result. |
| (1,96) | SubUI1 | Arithmetic | Byte | emitted | Pop two 8-bit unsigned integer (VB6 Byte) values; push their subtraction result. |
| (0,B7) | UMiI2 | Arithmetic | Integer/Boolean | emitted | Pop one 16-bit signed integer (VB6 Integer); push its arithmetic negation. |
| (1,C7) | UMiI2 | Arithmetic | Integer/Boolean | never dup | (alias) Pop one 16-bit signed integer (VB6 Integer); push its arithmetic negation. |
| (1,C8) | UMiI2 | Arithmetic | Integer/Boolean | never dup | Negate a 32-bit value (handler behaves as UMiI4 despite the UMiI2 name); never emitted. |
| (0,B8) | UMiI4 | Arithmetic | Long | emitted | Pop one 32-bit signed integer (VB6 Long); push its arithmetic negation. |
| (4,63) | ForI2 | Branch/loop | For loop, Integer/Boolean counter | emitted | Initialise a For loop with a Integer counter. |
| (4,64) | ForI4 | Branch/loop | For loop, Long counter | emitted | Initialize a For loop (ForI4). |
| (4,6B) | ForStepI2 | Branch/loop | For loop, Integer/Boolean counter | emitted | Initialise a For loop with a Integer counter and an explicit Step. |
| (4,6C) | ForStepI4 | Branch/loop | For loop, Long counter | emitted | Initialise a For loop with a Long counter and an explicit Step. |
| (4,6A) | ForStepUI1 | Branch/loop | For loop, Byte counter | emitted | Initialise a For loop with a Byte counter and explicit Step. |
| (4,62) | ForUI1 | Branch/loop | For loop, Byte counter | emitted | Initialise a For loop with a Byte counter. |
| (0,64) | NextI2 | Branch/loop | For loop, Integer/Boolean counter | emitted | Next of a For loop with a Integer counter. |
| (4,79) | NextI2 | Branch/loop | For loop, Integer/Boolean counter | never dup | Next of a For loop with a Integer counter. |
| (0,66) | NextI4 | Branch/loop | For loop, Long counter | emitted | Next of a For loop with a Long counter. |
| (4,7A) | NextI4 | Branch/loop | For loop, Long counter | never dup | Next of a For loop with a Long counter. |
| (0,65) | NextStepI2 | Branch/loop | For loop, Integer/Boolean counter | emitted | Next of a For loop with a Integer counter and an explicit Step. |
| (4,81) | NextStepI2 | Branch/loop | For loop, Integer/Boolean counter | never dup | Next of a For loop with a Integer counter and an explicit Step. |
| (0,67) | NextStepI4 | Branch/loop | For loop, Long counter | emitted | Next of a For loop with a Long counter and an explicit Step. |
| (4,82) | NextStepI4 | Branch/loop | For loop, Long counter | never dup | Next of a For loop with a Long counter and an explicit Step. |
| (4,80) | NextStepUI1 | Branch/loop | For loop, Byte counter | emitted dup | Next for a Byte loop counter with Step. |
| (4,78) | NextUI1 | Branch/loop | For loop, Byte counter | emitted | Next for a Byte loop counter. |
| (1,85) | BetweenI2 | Compare | Integer/Boolean | emitted | Case lo To hi range test on a Integer selector; push Boolean. |
| (1,86) | BetweenI4 | Compare | Long | emitted | Case lo To hi range test on a Long selector; push Boolean. |
| (1,84) | BetweenUI1 | Compare | Byte | emitted | Case lo To hi range test on a Byte selector; push Boolean. |
| (0,C6) | EqI2 | Compare | Integer/Boolean | emitted | Compare two values with =; push Boolean result. |
| (1,29) | EqI2 | Compare | Integer/Boolean | never dup | (alias) Compare two values with =; push Boolean result. |
| (1,2A) | EqI2 | Compare | Integer/Boolean | never dup | (alias) Compare two values with =; push Boolean result. |
| (0,C7) | EqI4 | Compare | Long | emitted | Compare two values with =; push Boolean result. |
| (1,2B) | EqI4 | Compare | Long | never dup | (alias) Compare two values with =; push Boolean result. |
| (0,DF) | GeI2 | Compare | Integer/Boolean | emitted | Compare two values with >=; push Boolean result. |
| (1,51) | GeI2 | Compare | Integer/Boolean | never dup | (alias) Compare two values with >=; push Boolean result. |
| (0,E0) | GeI4 | Compare | Long | emitted | Compare two values with >=; push Boolean result. |
| (1,52) | GeI4 | Compare | Long | never dup | (alias) Compare two values with >=; push Boolean result. |
| (1,50) | GeUI1 | Compare | Byte | emitted | Compare two values with >=; push Boolean result. |
| (0,DA) | GtI2 | Compare | Integer/Boolean | emitted | Compare two values with >; push Boolean result. |
| (1,6B) | GtI2 | Compare | Integer/Boolean | never dup | (alias) Compare two values with >; push Boolean result. |
| (0,DB) | GtI4 | Compare | Long | emitted | Compare two values with >; push Boolean result. |
| (1,6C) | GtI4 | Compare | Long | never dup | (alias) Compare two values with >; push Boolean result. |
| (1,6A) | GtUI1 | Compare | Byte | emitted | Compare two values with >; push Boolean result. |
| (0,D5) | LeI2 | Compare | Integer/Boolean | emitted | Compare two values with <=; push Boolean result. |
| (1,44) | LeI2 | Compare | Integer/Boolean | never dup | (alias) Compare two values with <=; push Boolean result. |
| (0,D6) | LeI4 | Compare | Long | emitted | Compare two values with <=; push Boolean result. |
| (1,45) | LeI4 | Compare | Long | never dup | (alias) Compare two values with <=; push Boolean result. |
| (1,43) | LeUI1 | Compare | Byte | emitted | Compare two values with <=; push Boolean result. |
| (0,D0) | LtI2 | Compare | Integer/Boolean | emitted | Compare two values with <; push Boolean result. |
| (1,5E) | LtI2 | Compare | Integer/Boolean | never dup | (alias) Compare two values with <; push Boolean result. |
| (0,D1) | LtI4 | Compare | Long | emitted | Compare two values with <; push Boolean result. |
| (1,5F) | LtI4 | Compare | Long | never dup | (alias) Compare two values with <; push Boolean result. |
| (1,5D) | LtUI1 | Compare | Byte | emitted | Compare two values with <; push Boolean result. |
| (0,CB) | NeI2 | Compare | Integer/Boolean | emitted | Compare two values with <>; push Boolean result. |
| (0,CC) | NeI4 | Compare | Long | emitted | Compare two values with <>; push Boolean result. |
| (1,38) | NeI4 | Compare | Long | never dup | (alias) Compare two values with <>; push Boolean result. |
| (1,36) | NeUI1 | Compare | Byte | never dup | Compare two values with <>; push Boolean result. |
| (1,37) | NeUI1 | Compare | Byte | never dup | (alias) Compare two values with <>; push Boolean result. |
| (0,F3) | LitI2 | Literal | Integer/Long | emitted | (alias) Push a 16-bit Integer literal. |
| (4,B5) | LitI2 | Literal | Integer/Long | never dup | (alias) Push a 16-bit Integer literal. |
| (0,F8) | LitI2FP | Literal | Integer/Long | never | |
| (4,B6) | LitI2FP | Literal | Integer/Long | never dup | |
| (0,F4) | LitI2_Byte | Literal | Integer/Long | emitted | Push a 1-byte immediate sign-extended to Integer. |
| (5,1A) | LitI2_Byte | Literal | Integer/Long | never dup | Push a 1-byte immediate sign-extended to Integer. |
| (0,F5) | LitI4 | Literal | Integer/Long | emitted | Push a 32-bit Long literal. |
| (4,B8) | LitI4 | Literal | Integer/Long | never dup | Push a 32-bit Long literal. |
| (4,B9) | LitI4 | Literal | Integer/Long | never dup | Push a 32-bit Long literal. |
| (0,6B) | FLdI2 | Load | Integer/Boolean, frame | emitted | Frame-relative load: FLdI2. |
| (2,E1) | FLdI2 | Load | Integer/Boolean, frame | never dup | Frame-relative load: FLdI2. |
| (2,E2) | FLdR4 | Load | 4-byte raw (Long), frame | never dup | Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference. |
| (2,E3) | FLdR4 | Load | 4-byte raw (Long), frame | never dup | Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference. |
| (2,E7) | FLdR4 | Load | 4-byte raw (Long), frame | never dup | Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference. |
| (2,E8) | FLdR4 | Load | 4-byte raw (Long), frame | never dup | Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference. |
| (3,1C) | FLdR4 | Load | 4-byte raw (Long), frame | never dup | Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference. |
| (2,E0) | FLdUI1 | Load | Byte, frame | emitted | Frame-relative load: FLdUI1. |
| (0,93) | FMemLdI2 | Load | Integer/Boolean, via frame pointer | emitted | Load a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemLdI2). |
| (3,D1) | FMemLdI2 | Load | Integer/Boolean, via frame pointer | never dup | Load a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemLdI2). |
| (0,94) | FMemLdR4 | Load | 4-byte raw (Long), via frame pointer | emitted | Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode. |
| (3,D2) | FMemLdR4 | Load | 4-byte raw (Long), via frame pointer | never dup | Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode. |
| (3,D3) | FMemLdR4 | Load | 4-byte raw (Long), via frame pointer | never dup | Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode. |
| (3,D7) | FMemLdR4 | Load | 4-byte raw (Long), via frame pointer | never dup | Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode. |
| (3,D8) | FMemLdR4 | Load | 4-byte raw (Long), via frame pointer | never dup | Load a 4-byte value through a pointer held in a frame slot plus offset (FMem); not a Single-specific opcode. |
| (3,D0) | FMemLdUI1 | Load | Byte, via frame pointer | emitted | Load Byte from a field reached through a pointer held in a frame slot. |
| (0,7F) | ILdI2 | Load | Integer/Boolean, ByRef/indirect | emitted | Pop an address; push the 16-bit signed integer (VB6 Integer) read from it. |
| (3,11) | ILdI2 | Load | Integer/Boolean, ByRef/indirect | never dup | Pop an address; push the 16-bit signed integer (VB6 Integer) read from it. |
| (0,80) | ILdI4 | Load | Long, ByRef/indirect | emitted | Pop an address; push the 32-bit signed integer (VB6 Long) read from it. |
| (3,12) | ILdI4 | Load | Long, ByRef/indirect | never dup | Pop an address; push the 32-bit signed integer (VB6 Long) read from it. |
| (3,13) | ILdI4 | Load | Long, ByRef/indirect | never dup | Pop an address; push the 32-bit signed integer (VB6 Long) read from it. |
| (3,17) | ILdI4 | Load | Long, ByRef/indirect | never dup | Pop an address; push the 32-bit signed integer (VB6 Long) read from it. |
| (3,18) | ILdI4 | Load | Long, ByRef/indirect | never dup | Pop an address; push the 32-bit signed integer (VB6 Long) read from it. |
| (3,10) | ILdUI1 | Load | Byte, ByRef/indirect | emitted | Pop an address; push the 8-bit unsigned integer (VB6 Byte) read from it. |
| (3,41) | IWMemLdI2 | Load | Integer/Boolean, W-base indirect | never | LOAD through a 16-bit signed integer (VB6 Integer) at [W-base+offset] -> [eax], one extra dereference (2-byte, W+indirect). |
| (3,42) | IWMemLdI4 | Load | Long, W-base indirect | never | LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect). |
| (3,43) | IWMemLdI4 | Load | Long, W-base indirect | never dup | LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect). |
| (3,47) | IWMemLdI4 | Load | Long, W-base indirect | never dup | LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect). |
| (3,48) | IWMemLdI4 | Load | Long, W-base indirect | never dup | LOAD through a 32-bit signed integer (VB6 Long) at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect). |
| (3,40) | IWMemLdUI1 | Load | Byte, W-base indirect | never | LOAD through a 8-bit unsigned (VB6 Byte) at [W-base+offset] -> [eax], one extra dereference (1-byte, W+indirect). |
| (0,75) | ImpAdLdI2 | Load | Integer/Boolean, global | emitted | Load Integer/Boolean from a module-level (global) variable. |
| (3,A1) | ImpAdLdI2 | Load | Integer/Boolean, global | never dup | Load Integer/Boolean from a module-level (global) variable. |
| (0,76) | ImpAdLdI4 | Load | Long, global | emitted | Load Long from a module-level (global) variable. |
| (3,A0) | ImpAdLdUI1 | Load | Byte, global | emitted | Load Byte from a module-level (global) variable. |
| (0,89) | MemLdI2 | Load | Integer/Boolean, member via pr | emitted | (alias) Load a 16-bit signed integer (VB6 Integer) from [pr + offset] where pr is on the stack. |
| (3,71) | MemLdI2 | Load | Integer/Boolean, member via pr | never dup | (alias) Load a 16-bit signed integer (VB6 Integer) from [pr + offset] where pr is on the stack. |
| (3,72) | MemLdR4 | Load | 4-byte raw (Long), member via pr | never dup | Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack. |
| (3,73) | MemLdR4 | Load | 4-byte raw (Long), member via pr | never dup | Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack. |
| (3,77) | MemLdR4 | Load | 4-byte raw (Long), member via pr | never dup | Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack. |
| (3,78) | MemLdR4 | Load | 4-byte raw (Long), member via pr | never dup | Load a BSTR (VB6 String) from [pr + offset] where pr is on the stack. |
| (3,70) | MemLdUI1 | Load | Byte, member via pr | emitted | Load a 8-bit unsigned integer (VB6 Byte) from [pr + offset] where pr is on the stack. |
| (4,D1) | WMemLdI2 | Load | Integer/Boolean, W-base | never | LOAD a 16-bit signed integer (VB6 Integer) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (2-byte). |
| (4,D0) | WMemLdUI1 | Load | Byte, W-base | never | LOAD a 8-bit unsigned (VB6 Byte) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (1-byte). |
| (0,C4) | AndI4 | Logic | Long | emitted | Pop operand(s); push bitwise And. |
| (1,21) | AndUI1 | Logic | Byte | never dup | Pop operand(s); push bitwise And. |
| (1,22) | AndUI1 | Logic | Byte | never dup | (alias) Pop operand(s); push bitwise And. |
| (1,23) | AndUI1 | Logic | Byte | never dup | (alias) Pop operand(s); push bitwise And. |
| (1,0A) | EqvI4 | Logic | Long | emitted | Pop two operands; push the bitwise equivalence (Eqv). |
| (1,0B) | EqvI4 | Logic | Long | emitted dup | (alias) Pop two operands; push the bitwise equivalence (Eqv). |
| (1,09) | EqvUI1 | Logic | Byte | emitted | Pop two operands; push the bitwise equivalence (Eqv). |
| (1,02) | ImpI4 | Logic | Long | emitted | Pop two operands; push the logical implication (Imp). |
| (1,03) | ImpI4 | Logic | Long | emitted dup | (alias) Pop two operands; push the logical implication (Imp). |
| (1,01) | ImpUI1 | Logic | Byte | emitted | Pop two operands; push the logical implication (Imp). |
| (0,C3) | NotI4 | Logic | Long | emitted | Pop operand(s); push bitwise Not. |
| (1,BF) | NotI4 | Logic | Long | never dup | (alias) Pop operand(s); push bitwise Not. |
| (1,C0) | NotI4 | Logic | Long | never dup | (alias) Pop operand(s); push bitwise Not. |
| (1,BE) | NotUI1 | Logic | Byte | emitted | Pop operand(s); push bitwise Not. |
| (1,19) | OrI2 | Logic | Integer/Boolean | never dup | Pop operand(s); push bitwise Or. |
| (1,1A) | OrI2 | Logic | Integer/Boolean | never dup | (alias) Pop operand(s); push bitwise Or. |
| (1,1B) | OrI2 | Logic | Integer/Boolean | never dup | (alias) Pop operand(s); push bitwise Or. |
| (0,C5) | OrI4 | Logic | Long | emitted | Pop operand(s); push bitwise Or. |
| (1,11) | XorI4 | Logic | Long | emitted dup | Pop operand(s); push bitwise Xor. |
| (1,12) | XorI4 | Logic | Long | emitted | (alias) Pop operand(s); push bitwise Xor. |
| (1,13) | XorI4 | Logic | Long | emitted dup | (alias) Pop operand(s); push bitwise Xor. |
| (0,BB) | FnAbsI2 | Math function | Integer/Boolean | emitted | Pop one 16-bit signed integer (VB6 Integer); push its absolute value. |
| (1,D4) | FnAbsI2 | Math function | Integer/Boolean | never dup | (alias) Pop one 16-bit signed integer (VB6 Integer); push its absolute value. |
| (0,BC) | FnAbsI4 | Math function | Long | emitted | Pop one 32-bit signed integer (VB6 Long); push its absolute value. |
| (1,D5) | FnAbsI4 | Math function | Long | never dup | (alias) Pop one 32-bit signed integer (VB6 Long); push its absolute value. |
| (1,F4) | FnSgnI4 | Math function | Long | emitted | Sgn() of a Long value; push an Integer (-1, 0 or 1). |
| (1,F2) | FnSgnUI1 | Math function | Byte | never dup | (duplicate slot of (1,F3) FnSgnUI1) (alias) Pop one 8-bit unsigned integer (VB6 Byte); push its absolute value. |
| (1,F3) | FnSgnUI1 | Math function | Byte | emitted | Sgn() of a Integer, Boolean or Byte value; push an Integer (-1, 0 or 1). |
| (0,98) | FMemStI2 | Store | Integer/Boolean, via frame pointer | emitted | Store a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemStI2). |
| (3,E1) | FMemStI2 | Store | Integer/Boolean, via frame pointer | never dup | Store a 16-bit signed integer (VB6 Integer) via [frame[%a] + offset] (FMemStI2). |
| (0,99) | FMemStI4 | Store | Long, via frame pointer | emitted | Store a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4). |
| (3,E2) | FMemStR4 | Store | 4-byte raw (Long), via frame pointer | never dup | Store a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4). |
| (3,E3) | FMemStR4 | Store | 4-byte raw (Long), via frame pointer | never dup | Store a 32-bit signed integer (VB6 Long) via [frame[%a] + offset] (FMemStI4). |
| (3,E0) | FMemStUI1 | Store | Byte, via frame pointer | emitted | Store Byte into a field reached through a pointer held in a frame slot. |
| (0,70) | FStI2 | Store | Integer/Boolean, frame | emitted | Pop a 16-bit signed integer (VB6 Integer); store into frame slot [ebp+%a]. |
| (2,F1) | FStI2 | Store | Integer/Boolean, frame | never dup | Pop a 16-bit signed integer (VB6 Integer); store into frame slot [ebp+%a]. |
| (0,71) | FStR4 | Store | 4-byte raw (Long), frame | emitted | Pop a 4-byte value and store it into a frame slot (Long locals; not Single). |
| (2,F2) | FStR4 | Store | 4-byte raw (Long), frame | never dup | Pop a 4-byte value and store it into a frame slot (Long locals; not Single). |
| (2,F3) | FStR4 | Store | 4-byte raw (Long), frame | never dup | Pop a 4-byte value and store it into a frame slot (Long locals; not Single). |
| (2,F0) | FStUI1 | Store | Byte, frame | emitted | Pop a 8-bit unsigned integer (VB6 Byte); store into frame slot [ebp+%a]. |
| (0,84) | IStI2 | Store | Integer/Boolean, ByRef/indirect | emitted | Pop value and address; write the 16-bit signed integer (VB6 Integer) through the address. |
| (3,21) | IStI2 | Store | Integer/Boolean, ByRef/indirect | never dup | Pop value and address; write the 16-bit signed integer (VB6 Integer) through the address. |
| (0,85) | IStI4 | Store | Long, ByRef/indirect | emitted | Pop value and address; write the 32-bit signed integer (VB6 Long) through the address. |
| (3,22) | IStI4 | Store | Long, ByRef/indirect | never dup | Pop value and address; write the 32-bit signed integer (VB6 Long) through the address. |
| (3,23) | IStI4 | Store | Long, ByRef/indirect | never dup | Pop value and address; write the 32-bit signed integer (VB6 Long) through the address. |
| (3,20) | IStUI1 | Store | Byte, ByRef/indirect | emitted | Pop value and address; write the 8-bit unsigned integer (VB6 Byte) through the address. |
| (3,51) | IWMemStI2 | Store | Integer/Boolean, W-base indirect | never | STORE through a 16-bit signed integer (VB6 Integer) at [W-base+offset] -> [eax], one extra dereference (2-byte, W+indirect). |
| (3,52) | IWMemStR4 | Store | 4-byte raw (Long), W-base indirect | never | Store a raw 4-byte value at [W-base + offset] plus one extra dereference (W-base = dispatcher argument [ebp+10h]); not a floating-point store. |
| (3,53) | IWMemStR4 | Store | 4-byte raw (Long), W-base indirect | never dup | Store a raw 4-byte value at [W-base + offset] plus one extra dereference (W-base = dispatcher argument [ebp+10h]); not a floating-point store. |
| (3,50) | IWMemStUI1 | Store | Byte, W-base indirect | never | STORE through a 8-bit unsigned (VB6 Byte) at [W-base+offset] -> [eax], one extra dereference (1-byte, W+indirect). |
| (0,7A) | ImpAdStI2 | Store | Integer/Boolean, global | emitted | Store Integer/Boolean into a module-level (global) variable. |
| (3,B1) | ImpAdStI2 | Store | Integer/Boolean, global | never dup | Store Integer/Boolean into a module-level (global) variable. |
| (0,7B) | ImpAdStR4 | Store | 4-byte raw (Long), global | emitted | Store 4-byte value into a module-level (global) variable. |
| (3,B2) | ImpAdStR4 | Store | 4-byte raw (Long), global | never dup | Store 4-byte value into a module-level (global) variable. |
| (3,B3) | ImpAdStR4 | Store | 4-byte raw (Long), global | never dup | Store 4-byte value into a module-level (global) variable. |
| (3,B0) | ImpAdStUI1 | Store | Byte, global | emitted | Store Byte into a module-level (global) variable. |
| (0,8E) | MemStI2 | Store | Integer/Boolean, member via pr | emitted | (alias) Store a 16-bit signed integer (VB6 Integer) into [pr + offset] (pr on the stack). |
| (3,81) | MemStI2 | Store | Integer/Boolean, member via pr | never dup | (alias) Store a 16-bit signed integer (VB6 Integer) into [pr + offset] (pr on the stack). |
| (0,8F) | MemStI4 | Store | Long, member via pr | emitted | Store a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack). |
| (3,82) | MemStR4 | Store | 4-byte raw (Long), member via pr | never dup | Store a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack). |
| (3,83) | MemStR4 | Store | 4-byte raw (Long), member via pr | never dup | Store a 32-bit signed integer (VB6 Long) into [pr + offset] (pr on the stack). |
| (3,80) | MemStUI1 | Store | Byte, member via pr | emitted | Store a 8-bit unsigned integer (VB6 Byte) into [pr + offset] (pr on the stack). |
| (4,E1) | WMemStI2 | Store | Integer/Boolean, W-base | never | STORE a 16-bit signed integer (VB6 Integer) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (2-byte). |
| (4,E2) | WMemStR4 | Store | 4-byte raw (Long), W-base | never | Store a raw 4-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store. |
| (4,E3) | WMemStR4 | Store | 4-byte raw (Long), W-base | never dup | Store a raw 4-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store. |
| (4,E0) | WMemStUI1 | Store | Byte, W-base | never | STORE a 8-bit unsigned (VB6 Byte) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (1-byte). |
Floating point 111 slots, 54 distinct handlers, 49 emitted
Single, Double and Date values carried on the FPU: arithmetic, compares, FPR4/FPR8 loads and stores, float literals and loops.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (1,91) | AddR4 | Arithmetic | Single | never dup | Pop two 32-bit IEEE 754 float (VB6 Single) values; push their addition result. |
| (1,92) | AddR4 | Arithmetic | Single | never dup | (alias) Pop two 32-bit IEEE 754 float (VB6 Single) values; push their addition result. |
| (0,AB) | AddR8 | Arithmetic | Double | emitted | Pop two 64-bit IEEE 754 float (VB6 Double) values; push their addition result. |
| (0,B6) | DivR8 | Arithmetic | Double | emitted | Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result. |
| (1,B9) | DivR8 | Arithmetic | Double | never dup | (alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result. |
| (1,BA) | DivR8 | Arithmetic | Double | never dup | (alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their floating-point division result. |
| (1,B1) | MulR4 | Arithmetic | Single | never dup | Pop two 32-bit IEEE 754 float (VB6 Single) values; push their multiplication result. |
| (1,B2) | MulR4 | Arithmetic | Single | never dup | (alias) Pop two 32-bit IEEE 754 float (VB6 Single) values; push their multiplication result. |
| (0,B3) | MulR8 | Arithmetic | Double | emitted | Pop two 64-bit IEEE 754 float (VB6 Double) values; push their multiplication result. |
| (1,D0) | PwrR8I2 | Arithmetic | Double x Integer/Boolean | never | Raise a Double to an Integer power; never emitted. |
| (1,CF) | PwrR8R8 | Arithmetic | Double x Double | emitted | Pop two 64-bit IEEE 754 float (VB6 Double) values; push their exponentiation result. |
| (0,AF) | SubR8 | Arithmetic | Double | emitted | Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result. |
| (1,99) | SubR8 | Arithmetic | Double | never dup | (alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result. |
| (1,9A) | SubR8 | Arithmetic | Double | never dup | (alias) Pop two 64-bit IEEE 754 float (VB6 Double) values; push their subtraction result. |
| (1,C9) | UMiR4 | Arithmetic | Single | never dup | Pop one 32-bit IEEE 754 float (VB6 Single); push its arithmetic negation. |
| (1,CA) | UMiR4 | Arithmetic | Single | never dup | (alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its arithmetic negation. |
| (0,B9) | UMiR8 | Arithmetic | Double | emitted | Pop one 64-bit IEEE 754 float (VB6 Double); push its arithmetic negation. |
| (4,65) | ForR4 | Branch/loop | For loop, Single counter | emitted | Initialise a For loop with a Single counter. |
| (4,66) | ForR8 | Branch/loop | For loop, Double counter | emitted | Initialise a For loop with a Double counter. |
| (4,6D) | ForStepR4 | Branch/loop | For loop, Single counter | emitted | Initialise a For loop with a Single counter and explicit Step. |
| (4,6E) | ForStepR8 | Branch/loop | For loop, Double counter | emitted | Initialise a For loop with a Double counter and explicit Step. |
| (4,7C) | NextR8 | Branch/loop | For loop, Double counter | never dup | Next for a Double loop counter with Step. |
| (4,84) | NextR8 | Branch/loop | For loop, Double counter | never dup | Next for a Double loop counter with Step. |
| (0,68) | NextStepR4 | Branch/loop | For loop, Single counter | emitted | Next for a Single loop counter with Step. |
| (4,7B) | NextStepR4 | Branch/loop | For loop, Single counter | never dup | Next for a Single loop counter with Step. |
| (4,83) | NextStepR4 | Branch/loop | For loop, Single counter | never dup | Next for a Single loop counter with Step. |
| (0,69) | NextStepR8 | Branch/loop | For loop, Double counter | emitted | Next for a Double loop counter with Step. |
| (1,87) | BetweenR4 | Compare | Single | emitted | Case lo To hi range test on a Single selector; push Boolean. |
| (1,88) | BetweenR4 | Compare | Single | emitted dup | Case lo To hi range test on a Double selector; push Boolean. |
| (0,C8) | EqR8 | Compare | Double | emitted | Compare two values with =; push Boolean result. |
| (1,2C) | EqR8 | Compare | Double | never dup | (alias) Compare two values with =; push Boolean result. |
| (1,2D) | EqR8 | Compare | Double | never dup | (alias) Compare two values with =; push Boolean result. |
| (1,53) | GeR4 | Compare | Single | never dup | Compare two values with >=; push Boolean result. |
| (1,54) | GeR4 | Compare | Single | never dup | (alias) Compare two values with >=; push Boolean result. |
| (0,E1) | GeR8 | Compare | Double | emitted | Compare two values with >=; push Boolean result. |
| (0,DC) | GtR8 | Compare | Double | emitted | Compare two values with >; push Boolean result. |
| (1,6D) | GtR8 | Compare | Double | never dup | (alias) Compare two values with >; push Boolean result. |
| (1,6E) | GtR8 | Compare | Double | never dup | (alias) Compare two values with >; push Boolean result. |
| (1,46) | LeR4 | Compare | Single | never dup | Compare two values with <=; push Boolean result. |
| (1,47) | LeR4 | Compare | Single | never dup | (alias) Compare two values with <=; push Boolean result. |
| (0,D7) | LeR8 | Compare | Double | emitted | Compare two values with <=; push Boolean result. |
| (1,60) | LtR4 | Compare | Single | never dup | Compare two values with <; push Boolean result. |
| (1,61) | LtR4 | Compare | Single | never dup | (alias) Compare two values with <; push Boolean result. |
| (0,D2) | LtR8 | Compare | Double | emitted | Compare two values with <; push Boolean result. |
| (1,39) | NeR4 | Compare | Single | never dup | Compare two values with <>; push Boolean result. |
| (1,3A) | NeR4 | Compare | Single | never dup | (alias) Compare two values with <>; push Boolean result. |
| (0,CD) | NeR8 | Compare | Double | emitted | Compare two values with <>; push Boolean result. |
| (0,FA) | LitDate | Literal | Double/Date (FPU) | emitted | Push an 8-byte floating-point literal onto the FPU (Double and Date literals). |
| (0,F9) | LitR4FP | Literal | Single (FPU) | emitted | Push a 4-byte Single literal onto the FPU. |
| (4,BA) | LitR4FP | Literal | Single (FPU) | never dup | Push a 4-byte Single literal onto the FPU. |
| (4,BB) | LitR8 | Literal | Double | never dup | Push an 8-byte literal (Currency literals; also raw 8-byte double payloads). |
| (4,BC) | LitR8 | Literal | Double | never dup | Push an 8-byte literal (Currency literals; also raw 8-byte double payloads). |
| (4,BD) | LitR8FP | Literal | Double (FPU) | never dup | Push an 8-byte floating-point literal onto the FPU (Double and Date literals). |
| (4,BE) | LitR8FP | Literal | Double (FPU) | never dup | Push an 8-byte floating-point literal onto the FPU (Double and Date literals). |
| (0,6E) | FLdFPR4 | Load | Single (FPU), frame | emitted | Frame-relative load: FLdFPR4. |
| (2,E9) | FLdFPR4 | Load | Single (FPU), frame | never dup | Frame-relative load: FLdFPR4. |
| (0,6F) | FLdFPR8 | Load | Double/Date (FPU), frame | emitted | Frame-relative load: FLdFPR8. |
| (2,EA) | FLdFPR8 | Load | Double/Date (FPU), frame | never dup | Frame-relative load: FLdFPR8. |
| (0,96) | FMemLdFPR4 | Load | Single (FPU), via frame pointer | emitted | Load Single from a field reached through a pointer held in a frame slot. |
| (3,D9) | FMemLdFPR4 | Load | Single (FPU), via frame pointer | never dup | Load Single from a field reached through a pointer held in a frame slot. |
| (0,97) | FMemLdFPR8 | Load | Double/Date (FPU), via frame pointer | emitted | Load Double/Date from a field reached through a pointer held in a frame slot. |
| (3,DA) | FMemLdFPR8 | Load | Double/Date (FPU), via frame pointer | never dup | Load Double/Date from a field reached through a pointer held in a frame slot. |
| (0,82) | ILdFPR4 | Load | Single (FPU), ByRef/indirect | emitted | Pop an address; push the Single on the x87 FPU stack read from it. |
| (3,19) | ILdFPR4 | Load | Single (FPU), ByRef/indirect | never dup | Pop an address; push the Single on the x87 FPU stack read from it. |
| (0,83) | ILdFPR8 | Load | Double/Date (FPU), ByRef/indirect | emitted | Load Double/Date from the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,1A) | ILdFPR8 | Load | Double/Date (FPU), ByRef/indirect | never dup | Load Double/Date from the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,49) | IWMemLdFPR4 | Load | Single (FPU), W-base indirect | never | LOAD through a Single via x87 FPU at [W-base+offset] -> [eax], one extra dereference (4-byte (FPU), W+indirect). |
| (3,4A) | IWMemLdFPR8 | Load | Double/Date (FPU), W-base indirect | never | LOAD through a Double via x87 FPU at [W-base+offset] -> [eax], one extra dereference (8-byte (FPU), W+indirect). |
| (0,78) | ImpAdLdFPR4 | Load | Single (FPU), global | emitted | Load Single from a module-level (global) variable. |
| (3,A9) | ImpAdLdFPR4 | Load | Single (FPU), global | never dup | Load Single from a module-level (global) variable. |
| (0,79) | ImpAdLdFPR8 | Load | Double/Date (FPU), global | emitted | Load Double/Date from a module-level (global) variable. |
| (3,AA) | ImpAdLdFPR8 | Load | Double/Date (FPU), global | never dup | Load Double/Date from a module-level (global) variable. |
| (0,8C) | MemLdFPR4 | Load | Single (FPU), member via pr | emitted | Load Single from a field at an offset from the cached object pointer pr. |
| (3,79) | MemLdFPR4 | Load | Single (FPU), member via pr | never dup | Load Single from a field at an offset from the cached object pointer pr. |
| (0,8D) | MemLdFPR8 | Load | Double/Date (FPU), member via pr | emitted | Load Double/Date from a field at an offset from the cached object pointer pr. |
| (3,7A) | MemLdFPR8 | Load | Double/Date (FPU), member via pr | never dup | Load Double/Date from a field at an offset from the cached object pointer pr. |
| (4,D9) | WMemLdFPR4 | Load | Single (FPU), W-base | never | LOAD a Single via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (FPU)). |
| (4,DA) | WMemLdFPR8 | Load | Double/Date (FPU), W-base | never | LOAD a Double via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte (FPU)). |
| (0,BD) | FnAbsR4 | Math function | Single | emitted | Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value. |
| (1,D6) | FnAbsR4 | Math function | Single | never dup | (alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value. |
| (1,D7) | FnAbsR4 | Math function | Single | never dup | (alias) Pop one 32-bit IEEE 754 float (VB6 Single); push its absolute value. |
| (1,DE) | FnFixR8 | Math function | Double | emitted | Fix() of a Single value: truncates toward zero. |
| (1,DF) | FnFixR8 | Math function | Double | emitted dup | Fix() of a Double, Date or String value: truncates toward zero. |
| (1,E6) | FnIntR8 | Math function | Double | emitted dup | Int() of a Single value: rounds down toward negative infinity. |
| (1,E7) | FnIntR8 | Math function | Double | emitted | Int() of a Double, Date or String value: rounds down toward negative infinity. |
| (1,F6) | FnSgnR4 | Math function | Single | emitted dup | Sgn() of a Double, Date, String or Variant (after coercion) value; push an Integer (-1, 0 or 1). |
| (1,F5) | FnSgnR8 | Math function | Double | emitted | Sgn() of a Single value; push an Integer (-1, 0 or 1). |
| (0,9B) | FMemStFPR4 | Store | Single (FPU), via frame pointer | emitted | Store Single into a field reached through a pointer held in a frame slot. |
| (3,E9) | FMemStFPR4 | Store | Single (FPU), via frame pointer | never dup | Store Single into a field reached through a pointer held in a frame slot. |
| (0,9C) | FMemStFPR8 | Store | Double/Date (FPU), via frame pointer | emitted | Store Double/Date into a field reached through a pointer held in a frame slot. |
| (3,EA) | FMemStFPR8 | Store | Double/Date (FPU), via frame pointer | never dup | Store Double/Date into a field reached through a pointer held in a frame slot. |
| (0,73) | FStFPR4 | Store | Single (FPU), frame | emitted | Pop a Single on the x87 FPU stack; store into frame slot [ebp+%a]. |
| (2,F9) | FStFPR4 | Store | Single (FPU), frame | never dup | Pop a Single on the x87 FPU stack; store into frame slot [ebp+%a]. |
| (0,74) | FStFPR8 | Store | Double/Date (FPU), frame | emitted | Pop a Double on the x87 FPU stack; store into frame slot [ebp+%a]. |
| (2,FA) | FStFPR8 | Store | Double/Date (FPU), frame | never dup | Pop a Double on the x87 FPU stack; store into frame slot [ebp+%a]. |
| (0,87) | IStFPR4 | Store | Single (FPU), ByRef/indirect | emitted | Store Single into the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,29) | IStFPR4 | Store | Single (FPU), ByRef/indirect | never dup | Store Single into the variable a ByRef argument (or other frame-held pointer) points to. |
| (0,88) | IStFPR8 | Store | Double/Date (FPU), ByRef/indirect | emitted | Store Double/Date into the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,2A) | IStFPR8 | Store | Double/Date (FPU), ByRef/indirect | never dup | Store Double/Date into the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,59) | IWMemStFPR4 | Store | Single (FPU), W-base indirect | never | STORE through a Single via x87 FPU at [W-base+offset] -> [eax], one extra dereference (4-byte (FPU), W+indirect). |
| (3,5A) | IWMemStFPR8 | Store | Double/Date (FPU), W-base indirect | never | STORE through a Double via x87 FPU at [W-base+offset] -> [eax], one extra dereference (8-byte (FPU), W+indirect). |
| (0,7D) | ImpAdStFPR4 | Store | Single (FPU), global | emitted | Store Single into a module-level (global) variable. |
| (3,B9) | ImpAdStFPR4 | Store | Single (FPU), global | never dup | Store Single into a module-level (global) variable. |
| (0,7E) | ImpAdStFPR8 | Store | Double/Date (FPU), global | emitted | Store Double/Date into a module-level (global) variable. |
| (3,BA) | ImpAdStFPR8 | Store | Double/Date (FPU), global | never dup | Store Double/Date into a module-level (global) variable. |
| (0,91) | MemStFPR4 | Store | Single (FPU), member via pr | emitted | Store Single into a field at an offset from the cached object pointer pr. |
| (3,89) | MemStFPR4 | Store | Single (FPU), member via pr | never dup | Store Single into a field at an offset from the cached object pointer pr. |
| (0,92) | MemStFPR8 | Store | Double/Date (FPU), member via pr | emitted | Store Double/Date into a field at an offset from the cached object pointer pr. |
| (3,8A) | MemStFPR8 | Store | Double/Date (FPU), member via pr | never dup | Store Double/Date into a field at an offset from the cached object pointer pr. |
| (4,E9) | WMemStFPR4 | Store | Single (FPU), W-base | never | STORE a Single via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (FPU)). |
| (4,EA) | WMemStFPR8 | Store | Double/Date (FPU), W-base | never | STORE a Double via x87 FPU at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte (FPU)). |
Currency 86 slots, 41 distinct handlers, 36 emitted
Currency (scaled 64-bit integer) values: arithmetic, compares (including Currency against other numbers), the raw 8-byte R8 moves, literals and loops.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (0,AC) | AddCy | Arithmetic | Currency | emitted | Pop two 64-bit scaled-integer Currency (×10^4) values; push their addition result. |
| (1,93) | AddCy | Arithmetic | Currency | never dup | (alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their addition result. |
| (0,B4) | MulCy | Arithmetic | Currency | emitted | Pop two 64-bit scaled-integer Currency (×10^4) values; push their multiplication result. |
| (1,B3) | MulCy | Arithmetic | Currency | never dup | (alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their multiplication result. |
| (0,B5) | MulCyI2 | Arithmetic | Currency x Integer/Boolean | emitted | Multiply a Currency by an Integer; push Currency. |
| (1,D1) | MulCyI2 | Arithmetic | Currency x Integer/Boolean | never dup | (duplicate slot of (0,B5) MulCyI2) Multiply a Currency by an Integer; push Currency. |
| (0,B0) | SubCy | Arithmetic | Currency | emitted | Pop two 64-bit scaled-integer Currency (×10^4) values; push their subtraction result. |
| (1,9B) | SubCy | Arithmetic | Currency | never dup | (alias) Pop two 64-bit scaled-integer Currency (×10^4) values; push their subtraction result. |
| (0,BA) | UMiCy | Arithmetic | Currency | emitted | Pop one 64-bit scaled-integer Currency (×10^4); push its arithmetic negation. |
| (1,CB) | UMiCy | Arithmetic | Currency | never dup | (alias) Pop one 64-bit scaled-integer Currency (×10^4); push its arithmetic negation. |
| (4,67) | ForCy | Branch/loop | For loop, Currency counter | emitted | Initialise a For loop with a Currency counter. |
| (4,6F) | ForStepCy | Branch/loop | For loop, Currency counter | emitted | Initialise a For loop with a Currency counter and explicit Step. |
| (0,6A) | NextStepCy | Branch/loop | For loop, Currency counter | emitted | Next for a Currency loop counter with Step. |
| (4,7D) | NextStepCy | Branch/loop | For loop, Currency counter | never dup | Next for a Currency loop counter with Step. |
| (4,85) | NextStepCy | Branch/loop | For loop, Currency counter | never dup | Next for a Currency loop counter with Step. |
| (1,89) | BetweenCy | Compare | Currency | emitted | Case lo To hi range test on a Currency selector; push Boolean. |
| (0,C9) | EqCy | Compare | Currency | emitted | Compare two values with =; push Boolean result. |
| (1,2E) | EqCy | Compare | Currency | never dup | (alias) Compare two values with =; push Boolean result. |
| (0,CA) | EqCyR8 | Compare | Currency vs number | emitted | Compare a Currency with a non-Currency number using =; push Boolean. |
| (1,35) | EqCyR8 | Compare | Currency vs number | never dup | (duplicate slot of (0,CA) EqCyR8) Compare a Currency with a non-Currency number using =; push Boolean. |
| (0,E2) | GeCy | Compare | Currency | emitted | Compare two values with >=; push Boolean result. |
| (1,55) | GeCy | Compare | Currency | never dup | (alias) Compare two values with >=; push Boolean result. |
| (0,E3) | GeCyR8 | Compare | Currency vs number | emitted | Compare a Currency with a non-Currency number using >=; push Boolean. |
| (1,5C) | GeCyR8 | Compare | Currency vs number | never dup | (duplicate slot of (0,E3) GeCyR8) Compare a Currency with a non-Currency number using >=; push Boolean. |
| (0,DD) | GtCy | Compare | Currency | emitted | Compare two values with >; push Boolean result. |
| (1,6F) | GtCy | Compare | Currency | never dup | (alias) Compare two values with >; push Boolean result. |
| (0,DE) | GtCyR8 | Compare | Currency vs number | emitted | Compare a Currency with a non-Currency number using >; push Boolean. |
| (1,76) | GtCyR8 | Compare | Currency vs number | never dup | (duplicate slot of (0,DE) GtCyR8) Compare a Currency with a non-Currency number using >; push Boolean. |
| (0,D8) | LeCy | Compare | Currency | emitted | Compare two values with <=; push Boolean result. |
| (1,48) | LeCy | Compare | Currency | never dup | (alias) Compare two values with <=; push Boolean result. |
| (0,D9) | LeCyR8 | Compare | Currency vs number | emitted | Compare a Currency with a non-Currency number using <=; push Boolean. |
| (1,4F) | LeCyR8 | Compare | Currency vs number | never dup | (duplicate slot of (0,D9) LeCyR8) Compare a Currency with a non-Currency number using <=; push Boolean. |
| (0,D3) | LtCy | Compare | Currency | emitted | Compare two values with <; push Boolean result. |
| (1,62) | LtCy | Compare | Currency | never dup | (alias) Compare two values with <; push Boolean result. |
| (0,D4) | LtCyR8 | Compare | Currency vs number | emitted | Compare a Currency with a non-Currency number using <; push Boolean. |
| (1,69) | LtCyR8 | Compare | Currency vs number | never dup | (duplicate slot of (0,D4) LtCyR8) Compare a Currency with a non-Currency number using <; push Boolean. |
| (0,CE) | NeCy | Compare | Currency | emitted | Compare two values with <>; push Boolean result. |
| (1,3B) | NeCy | Compare | Currency | never dup | (alias) Compare two values with <>; push Boolean result. |
| (0,CF) | NeCyR8 | Compare | Currency vs number | emitted | Compare a Currency with a non-Currency number using <>; push Boolean. |
| (1,42) | NeCyR8 | Compare | Currency vs number | never dup | (duplicate slot of (0,CF) NeCyR8) Compare a Currency with a non-Currency number using <>; push Boolean. |
| (0,F6) | LitCy | Literal | 8-byte (Currency) | emitted | Push an 8-byte literal (Currency literals; also raw 8-byte double payloads). |
| (0,F7) | LitCy4 | Literal | Currency | never | |
| (4,B7) | LitCy4 | Literal | Currency | never dup | |
| (0,6D) | FLdR8 | Load | 8-byte raw (Currency), frame | emitted | Load 8-byte value from a frame slot (local variable, temporary or ByVal argument). |
| (2,E4) | FLdR8 | Load | 8-byte raw (Currency), frame | never dup | Load 8-byte value from a frame slot (local variable, temporary or ByVal argument). |
| (2,E5) | FLdR8 | Load | 8-byte raw (Currency), frame | never dup | Load 8-byte value from a frame slot (local variable, temporary or ByVal argument). |
| (0,95) | FMemLdCy | Load | Currency, via frame pointer | emitted | Load Currency from a field reached through a pointer held in a frame slot. |
| (3,D4) | FMemLdR8 | Load | 8-byte raw (Currency), via frame pointer | never dup | Load Currency from a field reached through a pointer held in a frame slot. |
| (3,D5) | FMemLdR8 | Load | 8-byte raw (Currency), via frame pointer | never dup | Load Currency from a field reached through a pointer held in a frame slot. |
| (0,81) | ILdR8 | Load | 8-byte raw (Currency), ByRef/indirect | emitted | Load 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,14) | ILdR8 | Load | 8-byte raw (Currency), ByRef/indirect | never dup | Load 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,15) | ILdR8 | Load | 8-byte raw (Currency), ByRef/indirect | never dup | Load 8-byte value from the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,44) | IWMemLdCy | Load | Currency, W-base indirect | never | LOAD through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect). |
| (3,45) | IWMemLdCy | Load | Currency, W-base indirect | never dup | LOAD through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect). |
| (0,77) | ImpAdLdCy | Load | Currency, global | emitted | Load Currency from a module-level (global) variable. |
| (3,A4) | ImpAdLdCy | Load | Currency, global | never dup | Load Currency from a module-level (global) variable. |
| (3,A5) | ImpAdLdCy | Load | Currency, global | never dup | Load Currency from a module-level (global) variable. |
| (0,8B) | MemLdR8 | Load | 8-byte raw (Currency), member via pr | emitted | Load 8-byte value from a field at an offset from the cached object pointer pr. |
| (3,74) | MemLdR8 | Load | 8-byte raw (Currency), member via pr | never dup | Load 8-byte value from a field at an offset from the cached object pointer pr. |
| (3,75) | MemLdR8 | Load | 8-byte raw (Currency), member via pr | never dup | Load 8-byte value from a field at an offset from the cached object pointer pr. |
| (4,D4) | WMemLdCy | Load | Currency, W-base | never | LOAD a Currency (64-bit scaled int) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte). |
| (4,D5) | WMemLdCy | Load | Currency, W-base | never dup | LOAD a Currency (64-bit scaled int) at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (8-byte). |
| (0,BE) | FnAbsCy | Math function | Currency | emitted | Pop one 64-bit scaled-integer Currency (×10^4); push its absolute value. |
| (1,D8) | FnAbsCy | Math function | Currency | never dup | (alias) Pop one 64-bit scaled-integer Currency (×10^4); push its absolute value. |
| (1,E0) | FnFixCy | Math function | Currency | emitted | Fix() of a Currency value: truncates toward zero. |
| (1,E8) | FnIntCy | Math function | Currency | emitted | Int() of a Currency value: rounds down toward negative infinity. |
| (1,F7) | FnSgnCy | Math function | Currency | emitted | Sgn() of a Currency value; push an Integer (-1, 0 or 1). |
| (0,9A) | FMemStR8 | Store | 8-byte raw (Currency), via frame pointer | emitted | Store 8-byte value into a field reached through a pointer held in a frame slot. |
| (3,E4) | FMemStR8 | Store | 8-byte raw (Currency), via frame pointer | never dup | Store 8-byte value into a field reached through a pointer held in a frame slot. |
| (3,E5) | FMemStR8 | Store | 8-byte raw (Currency), via frame pointer | never dup | Store 8-byte value into a field reached through a pointer held in a frame slot. |
| (0,72) | FStR8 | Store | 8-byte raw (Currency), frame | emitted | Store 8-byte value into a frame slot (local variable, temporary or ByVal argument). |
| (2,F4) | FStR8 | Store | 8-byte raw (Currency), frame | never dup | Store 8-byte value into a frame slot (local variable, temporary or ByVal argument). |
| (2,F5) | FStR8 | Store | 8-byte raw (Currency), frame | never dup | Store 8-byte value into a frame slot (local variable, temporary or ByVal argument). |
| (0,86) | IStR8 | Store | 8-byte raw (Currency), ByRef/indirect | emitted | Store 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,24) | IStR8 | Store | 8-byte raw (Currency), ByRef/indirect | never dup | Store 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,25) | IStR8 | Store | 8-byte raw (Currency), ByRef/indirect | never dup | Store 8-byte value into the variable a ByRef argument (or other frame-held pointer) points to. |
| (3,54) | IWMemStCy | Store | Currency, W-base indirect | never | STORE through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect). |
| (3,55) | IWMemStCy | Store | Currency, W-base indirect | never dup | STORE through a Currency (64-bit scaled int) at [W-base+offset] -> [eax], one extra dereference (8-byte, W+indirect). |
| (0,7C) | ImpAdStCy | Store | Currency, global | emitted | Store Currency into a module-level (global) variable. |
| (3,B4) | ImpAdStR8 | Store | 8-byte raw (Currency), global | never dup | Store Currency into a module-level (global) variable. |
| (3,B5) | ImpAdStR8 | Store | 8-byte raw (Currency), global | never dup | Store Currency into a module-level (global) variable. |
| (3,84) | MemStCy | Store | Currency, member via pr | never dup | Store 8-byte value into a field at an offset from the cached object pointer pr. |
| (3,85) | MemStCy | Store | Currency, member via pr | never dup | Store 8-byte value into a field at an offset from the cached object pointer pr. |
| (0,90) | MemStR8 | Store | 8-byte raw (Currency), member via pr | emitted | Store 8-byte value into a field at an offset from the cached object pointer pr. |
| (4,E4) | WMemStR8 | Store | 8-byte raw (Currency), W-base | never | Store a raw 8-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store. |
| (4,E5) | WMemStR8 | Store | 8-byte raw (Currency), W-base | never dup | Store a raw 8-byte value at [W-base + offset] (W-base = dispatcher argument [ebp+10h]); not a floating-point store. |
Variant 129 slots, 121 distinct handlers, 96 emitted
Variant operations: Variant arithmetic, logic and compares (results in a temporary), Variant literals, loads/stores, and ByRef Variant parameters.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (1,94) | AddVar | Arithmetic | Variant | emitted | Pop two VBA Variant values; push their addition result. |
| (1,BC) | DivVar | Arithmetic | Variant | emitted | Pop two VBA Variant values; push their floating-point division result. |
| (1,AC) | IDvVar | Arithmetic | Variant | emitted | Variant integer division (\); result Variant in a temporary. |
| (1,A4) | ModVar | Arithmetic | Variant | emitted | Pop two VBA Variant values; push their modulo result. |
| (1,B4) | MulVar | Arithmetic | Variant | emitted | Pop two VBA Variant values; push their multiplication result. |
| (1,CE) | PwrVar | Arithmetic | Variant | emitted | Variant exponentiation (^); result Variant in a temporary. |
| (1,9C) | SubVar | Arithmetic | Variant | emitted | Pop two VBA Variant values; push their subtraction result. |
| (1,CC) | UMiVar | Arithmetic | Variant | emitted | Variant unary minus; result Variant in a temporary. |
| (4,70) | ForStepVar | Branch/loop | For loop, Variant counter | emitted | Initialise a For loop with a Variant counter and an explicit Step. |
| (4,68) | ForVar | Branch/loop | For loop, Variant counter | emitted | Initialise a For loop with a Variant counter. |
| (4,7E) | NextStepVar | Branch/loop | For loop, Variant counter | emitted | Step and re-test a For loop (NextStepVar). |
| (4,86) | NextStepVar | Branch/loop | For loop, Variant counter | emitted dup | (alias) Step and re-test a For loop (NextStepVar). |
| (1,8C) | BetweenTextVar | Compare | Variant (text compare) | emitted | Case lo To hi range test on a Variant selector; push Boolean. |
| (1,8A) | BetweenVar | Compare | Variant | emitted | Pop three values (val, lo, hi); push True if lo <= val <= hi, else False. |
| (1,31) | EqTextVar | Compare | Variant (text compare) | emitted | Variant = comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,34) | EqTextVarBool | Compare | Variant (text compare) | emitted | Variant = comparison (text mode) whose result is used directly as a condition; push Boolean. |
| (1,2F) | EqVar | Compare | Variant | emitted | Compare two values with =; push Boolean result. |
| (1,33) | EqVarBool | Compare | Variant | emitted | Variant = comparison (binary mode) whose result is used directly as a condition; push Boolean. |
| (1,58) | GeTextVar | Compare | Variant (text compare) | emitted | Variant >= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,5B) | GeTextVarBool | Compare | Variant (text compare) | emitted | Variant >= comparison (text mode) whose result is used directly as a condition; push Boolean. |
| (1,56) | GeVar | Compare | Variant | emitted | Compare two values with >=; push Boolean result. |
| (1,5A) | GeVarBool | Compare | Variant | emitted | Variant >= comparison (binary mode) whose result is used directly as a condition; push Boolean. |
| (1,72) | GtTextVar | Compare | Variant (text compare) | emitted | Variant > comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,75) | GtTextVarBool | Compare | Variant (text compare) | emitted | Variant > comparison (text mode) whose result is used directly as a condition; push Boolean. |
| (1,70) | GtVar | Compare | Variant | emitted | Compare two values with >; push Boolean result. |
| (1,74) | GtVarBool | Compare | Variant | emitted | Variant > comparison (binary mode) whose result is used directly as a condition; push Boolean. |
| (1,4B) | LeTextVar | Compare | Variant (text compare) | emitted | Variant <= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,4E) | LeTextVarBool | Compare | Variant (text compare) | emitted | Variant <= comparison (text mode) whose result is used directly as a condition; push Boolean. |
| (1,49) | LeVar | Compare | Variant | emitted | Variant <= comparison (binary); result Variant in a temporary. |
| (1,4D) | LeVarBool | Compare | Variant | emitted | Variant <= comparison (binary mode) whose result is used directly as a condition; push Boolean. |
| (1,7F) | LikeTextVar | Compare | Variant (text compare) | emitted | Variant Like comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,82) | LikeTextVarBool | Compare | Variant (text compare) | never | Like (text mode) with Variant operands, Boolean form; never emitted. |
| (1,7D) | LikeVar | Compare | Variant | emitted | Like with a Variant operand; result Variant in a temporary. |
| (1,81) | LikeVarBool | Compare | Variant | never | Like with Variant operands, Boolean form; never emitted. |
| (1,65) | LtTextVar | Compare | Variant (text compare) | emitted | Variant < comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,68) | LtTextVarBool | Compare | Variant (text compare) | emitted | Variant < comparison (text mode) whose result is used directly as a condition; push Boolean. |
| (1,63) | LtVar | Compare | Variant | emitted | Compare two values with <; push Boolean result. |
| (1,67) | LtVarBool | Compare | Variant | emitted | Variant < comparison (binary mode) whose result is used directly as a condition; push Boolean. |
| (1,3E) | NeTextVar | Compare | Variant (text compare) | emitted | Variant <> comparison (case-insensitive (Option Compare Text)); result Variant in a temporary. |
| (1,41) | NeTextVarBool | Compare | Variant (text compare) | emitted | Variant <> comparison (text mode) whose result is used directly as a condition; push Boolean. |
| (1,3C) | NeVar | Compare | Variant | emitted | Compare two values with <>; push Boolean result. |
| (1,40) | NeVarBool | Compare | Variant | emitted | Variant <> comparison (binary mode) whose result is used directly as a condition; push Boolean. |
| (4,C3) | LitVarCy | Literal | Variant literal | emitted | Create a Variant Currency literal (VT_CY) in a temporary. |
| (4,C5) | LitVarDate | Literal | Variant literal | emitted | Create a Variant Date literal (VT_DATE) in a temporary. |
| (0,28) | LitVarI2 | Literal | Variant literal | emitted | Create a Variant Integer literal (VT_I2) in a temporary. |
| (4,C0) | LitVarI2 | Literal | Variant literal | never dup | Create a Variant Integer literal (VT_I2) in a temporary. |
| (4,C1) | LitVarI4 | Literal | Variant literal | emitted | Create a Variant Long literal (VT_I4) in a temporary. |
| (4,C2) | LitVarR4 | Literal | Variant literal | emitted | Create a Variant Single literal (VT_R4) in a temporary. |
| (4,C4) | LitVarR8 | Literal | Variant literal | emitted | Create a Variant Double literal (VT_R8) in a temporary. |
| (0,3A) | LitVarStr | Literal | Variant literal | emitted | Push variant literal (LitVarStr). |
| (4,C6) | LitVarStr | Literal | Variant literal | never dup | Push variant literal (LitVarStr). |
| (4,3D) | LitVarUI1 | Literal | Variant literal | never | |
| (2,67) | LitVar_Empty | Literal | Variant literal | emitted | Create a Variant Empty literal in a temporary. |
| (2,66) | LitVar_FALSE | Literal | Variant literal | emitted | Push Variant False (0, subtype Boolean). |
| (0,27) | LitVar_Missing | Literal | Variant literal | emitted | Create a Variant Missing value (an omitted Optional argument) in a temporary. |
| (2,68) | LitVar_Missing | Literal | Variant literal | never dup | Create a Variant Missing value (an omitted Optional argument) in a temporary. |
| (2,64) | LitVar_Null | Literal | Variant literal | emitted | Create a Variant Null (VT_NULL) in a temporary. |
| (0,63) | LitVar_TRUE | Literal | Variant literal | emitted | Push Variant True (-1, subtype Boolean). |
| (2,65) | LitVar_TRUE | Literal | Variant literal | never dup | Push Variant True (-1, subtype Boolean). |
| (2,ED) | FLdVar | Load | Variant, frame | emitted | Frame-relative load: FLdVar. |
| (3,DD) | FMemLdVar | Load | Variant, via frame pointer | never | |
| (3,1D) | ILdDarg | Load | ByRef Variant parameter, ByRef/indirect | never | Pop an address; push the value of suffix `` read from it. |
| (3,16) | ILdRfDarg | Load | ByRef Variant parameter, ByRef/indirect | emitted | Pop an address; push the value of suffix `` read from it. |
| (3,4D) | IWMemLdDarg | Load | ByRef Variant parameter, W-base indirect | never | LOAD through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,46) | IWMemLdRfDarg | Load | ByRef Variant parameter, W-base indirect | never | LOAD through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,AD) | ImpAdLdVar | Load | Variant, global | never | |
| (3,7D) | MemLdVar | Load | Variant, member via pr | never | |
| (4,DD) | WMemLdVar | Load | Variant, W-base | never | LOAD a Variant at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (16-byte). |
| (1,27) | AndVar | Logic | Variant | emitted | Pop operand(s); push bitwise And. |
| (1,0F) | EqvVar | Logic | Variant | emitted | Variant bitwise equivalence (Eqv); result Variant in a temporary. |
| (1,07) | ImpVar | Logic | Variant | emitted | Variant bitwise implication (Imp); result Variant in a temporary. |
| (1,C4) | NotVar | Logic | Variant | emitted | Pop operand(s); push bitwise Not. |
| (1,1F) | OrVar | Logic | Variant | emitted | Pop operand(s); push bitwise Or. |
| (1,17) | XorVar | Logic | Variant | emitted | Variant bitwise exclusive-or (Xor); result Variant in a temporary. |
| (1,D9) | FnAbsVar | Math function | Variant | emitted | Variant Abs(); result Variant in a temporary. |
| (1,E1) | FnFixVar | Math function | Variant | emitted | Variant Fix(); result Variant in a temporary. |
| (1,E9) | FnIntVar | Math function | Variant | emitted | Variant Int(); result Variant in a temporary. |
| (4,92) | FDupVar | Other | emitted | Duplicate the top-of-stack (FDupVar). | |
| (3,E6) | FMemStVar | Store | Variant, via frame pointer | emitted | Store Variant into a field reached through a pointer held in a frame slot. |
| (3,EB) | FMemStVarAd | Store | Variant <- object, via frame pointer | emitted | Store object into a Variant into a field reached through a pointer held in a frame slot. |
| (3,EC) | FMemStVarAdFunc | Store | Variant <- object, via frame pointer | emitted | Store object from a call into a Variant into a field reached through a pointer held in a frame slot. |
| (3,F0) | FMemStVarCopy | Store | Variant, via frame pointer | emitted | Store Variant (copied) into a field reached through a pointer held in a frame slot. |
| (3,ED) | FMemStVarUnk | Store | Variant <- IUnknown, via frame pointer | emitted | Store IUnknown into a Variant into a field reached through a pointer held in a frame slot. |
| (3,EE) | FMemStVarUnkFunc | Store | Variant <- IUnknown, via frame pointer | emitted | Store IUnknown from a call into a Variant into a field reached through a pointer held in a frame slot. |
| (2,F6) | FStVar | Store | Variant, frame | emitted | Pop a VBA Variant; store into frame slot [ebp+%a]. |
| (2,FB) | FStVarAd | Store | Variant <- object, frame | emitted | Store object into a Variant into a frame slot (local variable, temporary or ByVal argument). |
| (2,FC) | FStVarAdFunc | Store | Variant <- object, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,00) | FStVarCopy | Store | Variant, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (0,4E) | FStVarCopyObj | Store | Variant, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (4,F8) | FStVarCopyObj | Store | Variant, frame | never dup | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,63) | FStVarNoPop | Store | Variant, frame | never | |
| (2,FD) | FStVarUnk | Store | Variant <- IUnknown, frame | emitted | Store IUnknown into a Variant into a frame slot (local variable, temporary or ByVal argument). |
| (2,FE) | FStVarUnkFunc | Store | Variant <- IUnknown, frame | emitted | Store IUnknown from a call into a Variant into a frame slot (local variable, temporary or ByVal argument). |
| (4,F7) | FStVarZero | Store | Variant, frame | emitted | Store a Variant temporary into a frame slot and zero the source (move semantics). |
| (5,39) | FStVarZero | Store | Variant, frame | never dup | Store a Variant temporary into a frame slot and zero the source (move semantics). |
| (0,62) | IStDarg | Store | ByRef Variant parameter, ByRef/indirect | emitted | (alias) Pop value and address; write the value of suffix `` through the address. |
| (3,26) | IStDarg | Store | ByRef Variant parameter, ByRef/indirect | never dup | (alias) Pop value and address; write the value of suffix `` through the address. |
| (3,2B) | IStDargAd | Store | ByRef Variant parameter, ByRef/indirect | emitted | Set a ByRef Variant parameter to an object reference (VT_DISPATCH). |
| (3,2C) | IStDargAdFunc | Store | ByRef Variant parameter, ByRef/indirect | emitted | Set a ByRef Variant parameter to an object returned by a call. |
| (3,30) | IStDargCopy | Store | ByRef Variant parameter, ByRef/indirect | emitted | Store a Variant into a ByRef Variant parameter (deep copy). |
| (3,2D) | IStDargUnk | Store | ByRef Variant parameter, ByRef/indirect | emitted | Set a ByRef Variant parameter to an IUnknown reference (VT_UNKNOWN). |
| (3,2E) | IStDargUnkFunc | Store | ByRef Variant parameter, ByRef/indirect | emitted | Set a ByRef Variant parameter to an IUnknown returned by a call. |
| (5,09) | IStVarCopyObj | Store | Variant, ByRef/indirect | never | |
| (3,56) | IWMemStDarg | Store | ByRef Variant parameter, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,5B) | IWMemStDargAd | Store | ByRef Variant parameter, W-base indirect | never | STORE through a raw 32-bit address at [W-base+offset] -> [eax], one extra dereference (4-byte (address), W+indirect). |
| (3,5C) | IWMemStDargAdFunc | Store | ByRef Variant parameter, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,60) | IWMemStDargCopy | Store | ByRef Variant parameter, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,5D) | IWMemStDargUnk | Store | ByRef Variant parameter, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,5E) | IWMemStDargUnkFunc | Store | ByRef Variant parameter, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,B6) | ImpAdStVar | Store | Variant, global | emitted | Store Variant into a module-level (global) variable. |
| (3,BB) | ImpAdStVarAd | Store | Variant <- object, global | emitted | Store object into a Variant into a module-level (global) variable. |
| (3,BC) | ImpAdStVarAdFunc | Store | Variant <- object, global | emitted | Store object from a call into a Variant into a module-level (global) variable. |
| (3,C0) | ImpAdStVarCopy | Store | Variant, global | emitted | Store Variant (copied) into a module-level (global) variable. |
| (3,BD) | ImpAdStVarUnk | Store | Variant <- IUnknown, global | emitted | Store IUnknown into a Variant into a module-level (global) variable. |
| (3,BE) | ImpAdStVarUnkFunc | Store | Variant <- IUnknown, global | emitted | Store IUnknown from a call into a Variant into a module-level (global) variable. |
| (3,86) | MemStVar | Store | Variant, member via pr | emitted | Store Variant into a field at an offset from the cached object pointer pr. |
| (3,8B) | MemStVarAd | Store | Variant <- object, member via pr | emitted | Store object into a Variant into a field at an offset from the cached object pointer pr. |
| (3,8C) | MemStVarAdFunc | Store | Variant <- object, member via pr | never | |
| (3,90) | MemStVarCopy | Store | Variant, member via pr | emitted | Store Variant (copied) into a field at an offset from the cached object pointer pr. |
| (3,8D) | MemStVarUnk | Store | Variant <- IUnknown, member via pr | emitted | Store IUnknown into a Variant into a field at an offset from the cached object pointer pr. |
| (3,8E) | MemStVarUnkFunc | Store | Variant <- IUnknown, member via pr | never | |
| (4,4D) | SetVarVar | Store | Set Variant = Variant | emitted | Frame-slot manipulation (SetVarVar). |
| (4,4E) | SetVarVarFunc | Store | Set Variant = Variant | emitted | Frame-slot manipulation (SetVarVarFunc). |
| (4,E6) | WMemStVar | Store | Variant, W-base | never | STORE a Variant at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (16-byte). |
| (4,EB) | WMemStVarAd | Store | Variant <- object, W-base | never | STORE a raw 32-bit address at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (address)). |
| (4,EC) | WMemStVarAdFunc | Store | Variant <- object, W-base | never | STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size). |
| (4,F0) | WMemStVarCopy | Store | Variant, W-base | never | STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size). |
| (4,ED) | WMemStVarUnk | Store | Variant <- IUnknown, W-base | never | STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size). |
| (4,EE) | WMemStVarUnkFunc | Store | Variant <- IUnknown, W-base | never | STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size). |
Object / COM 131 slots, 95 distinct handlers, 72 emitted
Object references and COM calls: early-bound vtable calls, late-bound IDispatch (by name or DISPID), New/As New, Set, Is/TypeOf, events and For Each over collections.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (4,74) | ForEachCollAd | Branch/loop | For Each over a collection | emitted | Start a For Each over a collection with an Object-typed control variable. |
| (4,88) | ForEachCollObj | Branch/loop | For Each over a collection | emitted | Start a For Each loop over a collection, with the control variable typed as a specific class (or Object). |
| (4,72) | ForEachCollVar | Branch/loop | For Each over a collection | emitted | Start a For Each loop over a collection or object, with a Variant control variable. |
| (4,89) | ForEachVar | Branch/loop | For Each over a collection | emitted | Initialize a For Each iteration (ForEachVar). |
| (4,8A) | ForEachVarFree | Branch/loop | For Each over a collection | never | |
| (4,75) | NextEachCollAd | Branch/loop | For Each over a collection | emitted | Next of a For Each over a collection with an Object-typed control variable. |
| (4,8B) | NextEachCollObj | Branch/loop | For Each over a collection | emitted | Next of a For Each loop over a collection, with the control variable typed as a specific class (or Object). |
| (4,73) | NextEachCollVar | Branch/loop | For Each over a collection | emitted | Next of a For Each loop over a collection or object, with a Variant control variable. |
| (4,8C) | NextEachVar | Branch/loop | For Each over a collection | emitted | Advance a For Each iteration (NextEachVar). |
| (4,A0) | LateIdCall | Call | late-bound IDispatch | emitted | Late-bound method call by compile-time DISPID (statement form, result discarded). |
| (4,A2) | LateIdCallLdVar | Call | late-bound IDispatch | emitted | Late-bound call by pre-resolved DispID (LateIdCallLdVar). |
| (4,A4) | LateIdCallSt | Call | late-bound IDispatch | emitted | Late-bound property-put by DISPID with arguments (o(i) = v / o.P(i) = v). |
| (4,AA) | LateIdNamedCall | Call | late-bound IDispatch | emitted | Late-bound method call by DISPID with named arguments. |
| (4,AB) | LateIdNamedCallLdVar | Call | late-bound IDispatch | emitted | Late-bound function call by DISPID with named arguments; push the result Variant. |
| (4,AC) | LateIdNamedCallSt | Call | late-bound IDispatch | emitted | Late-bound property-put by DISPID with named index arguments. |
| (4,98) | LateMemCall | Call | late-bound IDispatch | emitted | Late-bound method call by name (LateMemCall). |
| (4,9A) | LateMemCallLdVar | Call | late-bound IDispatch | emitted | Late-bound function call by name with arguments; result Variant in a temporary. |
| (4,9C) | LateMemCallSt | Call | late-bound IDispatch | emitted | Late-bound property-put by name with arguments (o.Prop(i) = v). |
| (4,A6) | LateMemNamedCall | Call | late-bound IDispatch | emitted | Late-bound method call by name with named arguments. |
| (4,A7) | LateMemNamedCallLdVar | Call | late-bound IDispatch | emitted | Late-bound function call by name with named arguments; push the result Variant. |
| (4,A8) | LateMemNamedCallSt | Call | late-bound IDispatch | emitted | Late-bound property-put by name with named index arguments. |
| (5,0C) | RaiseEvent | Call | emitted | RaiseEvent: fire one of the class's events, by DISPID, on every connected WithEvents sink. | |
| (0,12) | ThisVCallAd | Call | early-bound vtable call | never | |
| (4,0D) | ThisVCallCbFrame | Call | early-bound vtable call | never | |
| (4,05) | ThisVCallCy | Call | early-bound vtable call | never | |
| (0,11) | ThisVCallFPR8 | Call | early-bound vtable call | never | |
| (4,09) | ThisVCallHidden | Call | early-bound vtable call | never dup | |
| (4,0A) | ThisVCallHidden | Call | early-bound vtable call | never dup | |
| (4,0C) | ThisVCallHidden | Call | early-bound vtable call | never dup | |
| (5,2C) | ThisVCallHidden | Call | early-bound vtable call | never dup | |
| (0,10) | ThisVCallHresult | Call | early-bound vtable call | emitted | vtable call of one of the current object's own methods, written without Me.; check the HRESULT. |
| (2,6A) | ThisVCallHresult | Call | early-bound vtable call | never dup | vtable call of one of the current object's own methods, written without Me.; check the HRESULT. |
| (4,01) | ThisVCallI2 | Call | early-bound vtable call | never dup | |
| (4,02) | ThisVCallI2 | Call | early-bound vtable call | never dup | |
| (4,07) | ThisVCallI2 | Call | early-bound vtable call | never dup | |
| (4,08) | ThisVCallI2 | Call | early-bound vtable call | never dup | |
| (4,03) | ThisVCallR4 | Call | early-bound vtable call | never | |
| (4,04) | ThisVCallR8 | Call | early-bound vtable call | never | |
| (4,00) | ThisVCallUI1 | Call | early-bound vtable call | never | |
| (0,0F) | VCallAd | Call | early-bound vtable call | emitted | vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result. |
| (4,1D) | VCallCbFrame | Call | early-bound vtable call | never | |
| (4,15) | VCallCy | Call | early-bound vtable call | never | |
| (0,0E) | VCallFPR8 | Call | early-bound vtable call | emitted | vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded. |
| (4,19) | VCallFPR8 | Call | early-bound vtable call | never dup | vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded. |
| (4,1A) | VCallFPR8 | Call | early-bound vtable call | never dup | vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded. |
| (4,1C) | VCallFPR8 | Call | early-bound vtable call | never dup | vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded. |
| (5,2B) | VCallFPR8 | Call | early-bound vtable call | emitted dup | vtable call whose return value comes back on the FPU (Single/Double), or whose result is discarded. |
| (0,0D) | VCallHresult | Call | early-bound vtable call | emitted | vtable call of an early-bound COM method or property; check the HRESULT. |
| (2,69) | VCallHresult | Call | early-bound vtable call | never dup | vtable call of an early-bound COM method or property; check the HRESULT. |
| (4,13) | VCallR4 | Call | early-bound vtable call | never | |
| (4,14) | VCallR8 | Call | early-bound vtable call | never | |
| (4,11) | VCallStr | Call | early-bound vtable call | never dup | vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result. |
| (4,12) | VCallStr | Call | early-bound vtable call | never dup | vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result. |
| (4,17) | VCallStr | Call | early-bound vtable call | never dup | vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result. |
| (4,18) | VCallStr | Call | early-bound vtable call | never dup | vtable call returning a 32-bit value in EAX (non-HRESULT method); push the result. |
| (4,10) | VCallUI1 | Call | early-bound vtable call | emitted | vtable call returning a Byte in AL (non-HRESULT method); push the result. |
| (5,3E) | VarLateMemCallLdRfVar | Call | late-bound IDispatch | emitted | Late-bound method call with arguments on a Variant-held object; result passed on by reference. |
| (5,42) | VarLateMemCallLdVar | Call | late-bound IDispatch | emitted | Late-bound function call by name on an object held in a Variant; push the result. |
| (5,44) | VarLateMemCallSt | Call | late-bound IDispatch | emitted | Late-bound indexed property-put by name on an object held in a Variant. |
| (2,63) | LitNothing | Literal | Nothing | emitted | Push a literal: LitNothing. |
| (2,74) | FLdLateIdUnkVar | Load | never | ||
| (0,08) | FLdPr | Load | object pointer, frame | emitted | Load an object reference from a frame slot into the cached object register pr. |
| (2,EB) | FLdPr | Load | object pointer, frame | never dup | Load an object reference from a frame slot into the cached object register pr. |
| (0,21) | FLdPrThis | Load | object pointer, frame | emitted | Load Me for a call on the host object's built-in interface (form, UserControl, UserDocument). |
| (3,9E) | FLdPrThis | Load | object pointer, frame | never dup | (alias) Frame-relative load: FLdPrThis. |
| (0,3E) | FLdZeroAd | Load | object, frame | emitted | Frame-relative load: FLdZeroAd. |
| (0,51) | FLdZeroAd | Load | object, frame | emitted dup | (alias) Frame-relative load: FLdZeroAd. |
| (3,3F) | FLdZeroAd | Load | object, frame | never dup | Frame-relative load: FLdZeroAd. |
| (3,62) | FLdZeroAd | Load | object, frame | never dup | Frame-relative load: FLdZeroAd. |
| (5,38) | FLdZeroAry | Load | never | ||
| (0,5F) | FMemLdPr | Load | object pointer, via frame pointer | emitted | Load object pointer to pr from a field reached through a pointer held in a frame slot. |
| (3,DB) | FMemLdPr | Load | object pointer, via frame pointer | never dup | Load object pointer to pr from a field reached through a pointer held in a frame slot. |
| (0,48) | ILdPr | Load | object pointer, ByRef/indirect | emitted | Pop an address; push the object pointer read from it. |
| (3,1B) | ILdPr | Load | object pointer, ByRef/indirect | never dup | Pop an address; push the object pointer read from it. |
| (3,4B) | IWMemLdPr | Load | object pointer, W-base indirect | never | LOAD through a object pointer at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect). |
| (4,DB) | IWMemLdPr | Load | object pointer, W-base indirect | never dup | LOAD through a object pointer at [W-base+offset] -> [eax], one extra dereference (4-byte, W+indirect). |
| (0,22) | ImpAdLdPr | Load | object pointer, global | never | |
| (3,AB) | ImpAdLdPr | Load | object pointer, global | never dup | |
| (0,61) | LateIdLdVar | Load | late-bound IDispatch | emitted | Late-bound property-get by compile-time DISPID; push the result Variant. |
| (4,A1) | LateIdLdVar | Load | late-bound IDispatch | never dup | Late-bound property-get by compile-time DISPID; push the result Variant. |
| (0,57) | LateMemLdVar | Load | late-bound IDispatch | emitted | Late-bound property get (LateMemLdVar). |
| (4,99) | LateMemLdVar | Load | late-bound IDispatch | never dup | Late-bound property get (LateMemLdVar). |
| (0,58) | MemLdPr | Load | object pointer, member via pr | emitted | (alias) Load a object pointer from [pr + offset] where pr is on the stack. |
| (3,7B) | MemLdPr | Load | object pointer, member via pr | never dup | (alias) Load a object pointer from [pr + offset] where pr is on the stack. |
| (5,3D) | VarLateMemLdRfVar | Load | late-bound IDispatch | emitted | Late-bound property get by name on a Variant-held object, passed on by reference. |
| (5,41) | VarLateMemLdVar | Load | late-bound IDispatch | emitted | Late-bound property get by name on an object held in a Variant; push the result Variant. |
| (4,97) | AddRef | Other | never | COM reference-count operation: AddRef. | |
| (5,08) | CExtInstUnk | Other | never | Type conversion (CExtInstUnk). | |
| (0,3D) | CastAd | Other | emitted | Type conversion (CastAd). | |
| (3,F2) | CastAd | Other | never dup | Type conversion (CastAd). | |
| (3,F3) | CastAdVar | Other | emitted | Type conversion (CastAdVar). | |
| (4,8D) | CheckType | Other | emitted | TypeOf obj Is Class: test an object reference against an interface. | |
| (2,6F) | CheckTypeVar | Other | emitted | TypeOf v Is Class where the operand is a Variant. | |
| (1,D2) | Is | Other | emitted | Is operator: compare two object references for identity; push Boolean. | |
| (2,73) | LdPrUnkVar | Other | never | Frame-slot manipulation (LdPrUnkVar). | |
| (3,9F) | LdPrVar | Other | emitted | Frame-slot manipulation (LdPrVar). | |
| (3,F4) | New | Other | emitted | Create a new object instance (New Class). | |
| (0,56) | NewIfNullAd | Other | emitted | As New auto-instancing: create the object if Nothing, then push the reference. | |
| (3,F6) | NewIfNullAd | Other | never dup | As New auto-instancing: create the object if Nothing, then push the reference. | |
| (0,24) | NewIfNullPr | Other | emitted | As New auto-instancing: create the object if the variable is Nothing, then load it into pr. | |
| (3,F7) | NewIfNullPr | Other | never dup | As New auto-instancing: create the object if the variable is Nothing, then load it into pr. | |
| (3,F5) | NewIfNullRf | Other | emitted | As New auto-instancing: create the object if Nothing, then push the variable's address (ByRef). | |
| (4,FA) | VerifyPVarObj | Other | never | Type check / verify (VerifyPVarObj). | |
| (4,F9) | VerifyVarObj | Other | emitted | Type check / verify (VerifyVarObj). | |
| (3,E8) | FMemStAd | Store | object, via frame pointer | emitted | Store object reference into a field reached through a pointer held in a frame slot. |
| (3,EF) | FMemStAdFunc | Store | object, via frame pointer | emitted | Store object reference from a call into a field reached through a pointer held in a frame slot. |
| (2,F8) | FStAd | Store | object, frame | emitted | Pop a raw 32-bit address (pointer); store into frame slot [ebp+%a]. |
| (0,19) | FStAdFunc | Store | object, frame | emitted | Store an object reference returned by New or a call into an object variable, without an extra AddRef. |
| (2,FF) | FStAdFunc | Store | object, frame | never dup | Store an object reference returned by New or a call into an object variable, without an extra AddRef. |
| (0,5B) | FStAdFuncNoPop | Store | object, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,9D) | FStAdFuncNoPop | Store | object, frame | never dup | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,9C) | FStAdNoPop | Store | object, frame | emitted | Pop a value of suffix `; store into frame slot [ebp+%a]`. |
| (3,28) | IStAd | Store | object, ByRef/indirect | emitted | Pop value and address; write the raw 32-bit address (pointer) through the address. |
| (3,2F) | IStAdFunc | Store | object, ByRef/indirect | emitted | Pop value and address; write the value of suffix `` through the address. |
| (3,58) | IWMemStAd | Store | object, W-base indirect | never | STORE through a raw 32-bit address at [W-base+offset] -> [eax], one extra dereference (4-byte (address), W+indirect). |
| (3,5F) | IWMemStAdFunc | Store | object, W-base indirect | never | STORE through a value of suffix `` at [W-base+offset] -> [eax], one extra dereference (unknown-size, W+indirect). |
| (3,B8) | ImpAdStAd | Store | object, global | emitted | Store object reference into a module-level (global) variable. |
| (3,BF) | ImpAdStAdFunc | Store | object, global | emitted | Store through an imported address (ImpAdStAdFunc). |
| (4,AD) | LateIdNamedStAd | Store | late-bound IDispatch | emitted | Late-bound property-putref (Set) by DISPID with named index arguments. |
| (0,2C) | LateIdSt | Store | late-bound IDispatch | emitted | Late-bound property-put by compile-time DISPID. |
| (4,A3) | LateIdSt | Store | late-bound IDispatch | never dup | Late-bound property-put by compile-time DISPID. |
| (4,A5) | LateIdStAd | Store | late-bound IDispatch | emitted | Late-bound property-putref by DISPID (Set o(i) = obj). |
| (4,A9) | LateMemNamedStAd | Store | late-bound IDispatch | emitted | Late-bound property-putref by name with named index arguments. |
| (4,9B) | LateMemSt | Store | late-bound IDispatch | emitted | Late-bound property put (LateMemSt). |
| (4,9D) | LateMemStAd | Store | late-bound IDispatch | emitted | Late-bound property-putref by name (Set o.Prop = obj). |
| (3,88) | MemStAd | Store | object, member via pr | emitted | Store a raw 32-bit address (pointer) into [pr + offset] (pr on the stack). |
| (3,8F) | MemStAdFunc | Store | object, member via pr | never | |
| (5,43) | VarLateMemSt | Store | late-bound IDispatch | emitted | Late-bound property put by name on an object held in a Variant. |
| (5,45) | VarLateMemStAd | Store | late-bound IDispatch | emitted | Late-bound property-putref by name on an object held in a Variant. |
| (4,E8) | WMemStAd | Store | object, W-base | never | STORE a raw 32-bit address at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (address)). |
| (4,EF) | WMemStAdFunc | Store | object, W-base | never | STORE a value of suffix `` at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (unknown-size). |
UDT / record 35 slots, 32 distinct handlers, 25 emitted
User-defined types: record assignment and destruction, UDT function returns, UDTs in Variants (public records), UDTs passed to APIs, Get/Put of records, fixed arrays inside UDTs.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (4,2D) | ImpAdCallCbFrame | Call | user-defined type | emitted | Call a module Function that returns a user-defined type into a frame buffer. |
| (5,32) | CDargRefUdt | Convert | user-defined type | emitted | Pass a UDT by reference to a late-bound call as a VT_RECORD|VT_BYREF Variant. |
| (0,1F) | CRec2Ansi | Convert | user-defined type | emitted | Convert top-of-stack 2Ansi to Rec. |
| (0,20) | CRec2Uni | Convert | user-defined type | emitted | Convert top-of-stack 2Uni to Rec. |
| (2,5D) | CRecAnsi2Uni | Convert | user-defined type | never dup | Convert top-of-stack 2Uni to Rec. |
| (2,5E) | CRecUni2Ansi | Convert | user-defined type | never dup | Convert top-of-stack 2Ansi to Rec. |
| (5,3A) | CVarAryUdt | Convert | user-defined type | emitted | Convert an array to a Variant (v = a), descriptor-driven. |
| (5,33) | CVarRefUdt | Convert | user-defined type | emitted | Pass a public-record UDT ByRef to a Variant parameter (VT_RECORD|VT_BYREF). |
| (5,34) | CVarUdt | Convert | user-defined type | emitted | Copy a public-record UDT into a Variant (VT_RECORD). |
| (0,38) | CopyBytes | Convert | user-defined type | emitted | Copy a fixed number of bytes from one address to another (plain-data UDT assignment). |
| (3,CA) | CopyBytes | Convert | user-defined type | never dup | Copy a fixed number of bytes from one address to another (plain-data UDT assignment). |
| (5,37) | CopyBytesZero | Convert | user-defined type | never | |
| (3,FF) | DestructOFrame | Free/cleanup | user-defined type | emitted | Initialise (zero) a UDT temporary in the frame before a call that fills it. |
| (5,2A) | DestructRecord | Free/cleanup | user-defined type | emitted | Release the reference-counted members of a UDT (destruct before overwrite). |
| (5,31) | EraseDestrKeepData | Free/cleanup | user-defined type | never | |
| (4,60) | EraseDestruct | Free/cleanup | user-defined type | emitted | Erase a fixed-size array of UDTs: destruct every element's reference members. |
| (5,16) | GetRecOwn3 | I/O | user-defined type | emitted | File I/O primitive: GetRecOwn3. |
| (5,17) | GetRecOwn4 | I/O | user-defined type | emitted | File I/O primitive: GetRecOwn4. |
| (2,79) | GetRecOwner3 | I/O | user-defined type | never | |
| (2,7A) | GetRecOwner4 | I/O | user-defined type | never | |
| (5,18) | PutRecOwn3 | I/O | user-defined type | emitted | File I/O primitive: PutRecOwn3. |
| (5,19) | PutRecOwn4 | I/O | user-defined type | emitted | File I/O primitive: PutRecOwn4. |
| (2,7B) | PutRecOwner3 | I/O | user-defined type | never | |
| (2,7C) | PutRecOwner4 | I/O | user-defined type | never | |
| (5,06) | AryInRecLdPr | Other | user-defined type | emitted | SafeArray operation: AryInRecLdPr. |
| (5,07) | AryInRecLdRf | Other | user-defined type | never | SafeArray operation: AryInRecLdRf. |
| (5,3C) | RedimPreserveVarUdt | Other | user-defined type | emitted | ReDim Preserve a Variant-held array of a public record type. |
| (5,3B) | RedimVarUdt | Other | user-defined type | emitted | ReDim a Variant as an array of a public record type. |
| (4,9E) | ExitProcFrameCb | Return | user-defined type | emitted | Return a user-defined type from a module Function by copying it to the caller's buffer. |
| (5,30) | ExitProcFrameCbHresult | Return | user-defined type | emitted | Return a user-defined type from a class/COM method (HRESULT-returning) by copying it to the [out] buffer. |
| (4,9F) | ExitProcFrameCbStack | Return | user-defined type | emitted | Return a small (8-byte) user-defined type from a module Function. |
| (4,F5) | AssignRecord | Store | user-defined type | emitted | Assign one UDT to another (deep copy honouring String/Variant/Object members). |
| (5,04) | StAryRecCopy | Store | user-defined type | emitted | Assign one dynamic array of UDTs to another (deep copy). |
| (5,03) | StAryRecMove | Store | user-defined type | emitted | Move a temporary array of UDTs (function result) into an array variable. |
| (5,35) | StUdtVar | Store | user-defined type | emitted | Store a Variant holding a record into a UDT variable (udt = v). |
Array 87 slots, 60 distinct handlers, 50 emitted
SAFEARRAY operations: element loads/stores, ReDim/Erase, bounds, array assignment and For Each over arrays.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (4,76) | ForEachAryVar | Branch/loop | For Each over an array | emitted | Start a For Each loop over an array, with a Variant control variable. |
| (4,77) | NextEachAryVar | Branch/loop | For Each over an array | emitted | Next of a For Each loop over an array, with a Variant control variable. |
| (0,9F) | Ary1LdCy | Load | emitted | SafeArray operation: Ary1LdCy. | |
| (0,A0) | Ary1LdFPR4 | Load | emitted | SafeArray operation: Ary1LdFPR4. | |
| (2,99) | Ary1LdFPR4 | Load | never dup | (alias) SafeArray operation: Ary1LdFPR4. | |
| (0,A1) | Ary1LdFPR8 | Load | emitted | SafeArray operation: Ary1LdFPR8. | |
| (2,9A) | Ary1LdFPR8 | Load | never dup | (alias) SafeArray operation: Ary1LdFPR8. | |
| (0,9D) | Ary1LdI2 | Load | emitted | SafeArray operation: Ary1LdI2. | |
| (2,91) | Ary1LdI2 | Load | never dup | (alias) SafeArray operation: Ary1LdI2. | |
| (0,9E) | Ary1LdI4 | Load | emitted | SafeArray operation: Ary1LdI4. | |
| (2,92) | Ary1LdI4 | Load | never dup | (alias) SafeArray operation: Ary1LdI4. | |
| (2,93) | Ary1LdI4 | Load | never dup | (alias) SafeArray operation: Ary1LdI4. | |
| (2,97) | Ary1LdI4 | Load | never dup | (alias) SafeArray operation: Ary1LdI4. | |
| (2,98) | Ary1LdI4 | Load | never dup | (alias) SafeArray operation: Ary1LdI4. | |
| (0,41) | Ary1LdPr | Load | emitted | SafeArray operation: Ary1LdPr. | |
| (2,9B) | Ary1LdPr | Load | never dup | (alias) SafeArray operation: Ary1LdPr. | |
| (2,94) | Ary1LdR8 | Load | never dup | SafeArray operation: Ary1LdR8. | |
| (2,95) | Ary1LdR8 | Load | never dup | (alias) SafeArray operation: Ary1LdR8. | |
| (0,40) | Ary1LdRf | Load | emitted | SafeArray operation: Ary1LdRf. | |
| (2,9C) | Ary1LdRf | Load | never dup | (alias) SafeArray operation: Ary1LdRf. | |
| (2,96) | Ary1LdRfVar | Load | emitted | SafeArray operation: Ary1LdRfVar. | |
| (2,B2) | Ary1LdRfVarg | Load | emitted | SafeArray operation: Ary1LdRfVarg. | |
| (2,B4) | Ary1LdRfVargParam | Load | emitted | SafeArray operation: Ary1LdRfVargParam. | |
| (2,90) | Ary1LdUI1 | Load | emitted | SafeArray operation: Ary1LdUI1. | |
| (2,9D) | Ary1LdVar | Load | never | SafeArray operation: Ary1LdVar. | |
| (2,B3) | Ary1LdVarg | Load | never | SafeArray operation: Ary1LdVarg. | |
| (0,A7) | AryLdPr | Load | emitted | Compute the address of a multi-dimensional array element and load it into pr. | |
| (2,8D) | AryLdPr | Load | never dup | Compute the address of a multi-dimensional array element and load it into pr. | |
| (0,A8) | AryLdRf | Load | never | ||
| (2,8E) | AryLdRf | Load | never dup | ||
| (4,AF) | VarIndexLdRfVar | Load | emitted | Index into an array held in a Variant and push a reference to the element Variant. | |
| (4,F2) | VarIndexLdRfVarLock | Load | emitted | SafeArray operation: VarIndexLdRfVarLock. | |
| (4,AE) | VarIndexLdVar | Load | emitted | SafeArray operation: VarIndexLdVar. | |
| (5,0A) | ArrayRebase1Var | Other | emitted | SafeArray operation: ArrayRebase1Var. | |
| (0,26) | AryDescTemp | Other | emitted | SafeArray operation: AryDescTemp. | |
| (3,0F) | AryDescTemp | Other | never dup | SafeArray operation: AryDescTemp. | |
| (0,2E) | AryLock | Other | emitted | SafeArray operation: AryLock. | |
| (3,0D) | AryLock | Other | never dup | SafeArray operation: AryLock. | |
| (0,2D) | AryUnlock | Other | emitted | SafeArray operation: AryUnlock. | |
| (3,0E) | AryUnlock | Other | never dup | SafeArray operation: AryUnlock. | |
| (0,5A) | Erase | Other | emitted | Erase an array: Erase. | |
| (2,C3) | Erase | Other | never dup | (alias) Erase an array: Erase. | |
| (4,CF) | EraseNoPop | Other | never | Frame-slot manipulation (EraseNoPop). | |
| (0,4C) | FnLBound | Other | emitted | SafeArray operation: FnLBound. | |
| (2,CA) | FnLBound | Other | never dup | (alias) SafeArray operation: FnLBound. | |
| (2,CB) | FnUBound | Other | emitted | SafeArray operation: FnUBound. | |
| (4,8E) | Redim | Other | emitted | Resize a dynamic array (Redim). | |
| (4,8F) | RedimPreserve | Other | emitted | Resize a dynamic array (RedimPreserve). | |
| (4,91) | RedimPreserveVar | Other | emitted | ReDim Preserve an array held in a Variant. | |
| (4,90) | RedimVar | Other | emitted | ReDim an array held in a Variant. | |
| (2,A8) | Ary1StAd | Store | emitted | SafeArray operation: Ary1StAd. | |
| (2,AF) | Ary1StAdFunc | Store | never | SafeArray operation: Ary1StAdFunc. | |
| (0,A4) | Ary1StCy | Store | emitted | SafeArray operation: Ary1StCy. | |
| (2,A4) | Ary1StCy | Store | never dup | (alias) SafeArray operation: Ary1StCy. | |
| (2,A5) | Ary1StCy | Store | never dup | (alias) SafeArray operation: Ary1StCy. | |
| (0,A5) | Ary1StFPR4 | Store | emitted | SafeArray operation: Ary1StFPR4. | |
| (2,A9) | Ary1StFPR4 | Store | never dup | (alias) SafeArray operation: Ary1StFPR4. | |
| (0,A6) | Ary1StFPR8 | Store | emitted | SafeArray operation: Ary1StFPR8. | |
| (2,AA) | Ary1StFPR8 | Store | never dup | (alias) SafeArray operation: Ary1StFPR8. | |
| (0,A2) | Ary1StI2 | Store | emitted | SafeArray operation: Ary1StI2. | |
| (2,A1) | Ary1StI2 | Store | never dup | (alias) SafeArray operation: Ary1StI2. | |
| (0,A3) | Ary1StI4 | Store | emitted | SafeArray operation: Ary1StI4. | |
| (2,A2) | Ary1StR4 | Store | never dup | SafeArray operation: Ary1StR4. | |
| (2,A3) | Ary1StR4 | Store | never dup | (alias) SafeArray operation: Ary1StR4. | |
| (2,A7) | Ary1StStr | Store | never | SafeArray operation: Ary1StStr. | |
| (0,3B) | Ary1StStrCopy | Store | emitted | SafeArray operation: Ary1StStrCopy. | |
| (2,B1) | Ary1StStrCopy | Store | never dup | (alias) SafeArray operation: Ary1StStrCopy. | |
| (2,A0) | Ary1StUI1 | Store | emitted | SafeArray operation: Ary1StUI1. | |
| (0,52) | Ary1StVar | Store | emitted | SafeArray operation: Ary1StVar. | |
| (2,A6) | Ary1StVar | Store | never dup | (alias) SafeArray operation: Ary1StVar. | |
| (2,AB) | Ary1StVarAd | Store | emitted | SafeArray operation: Ary1StVarAd. | |
| (2,AC) | Ary1StVarAdFunc | Store | never | SafeArray operation: Ary1StVarAdFunc. | |
| (2,B0) | Ary1StVarCopy | Store | emitted | SafeArray operation: Ary1StVarCopy. | |
| (2,AD) | Ary1StVarUnk | Store | emitted | SafeArray operation: Ary1StVarUnk. | |
| (2,AE) | Ary1StVarUnkFunc | Store | never | SafeArray operation: Ary1StVarUnkFunc. | |
| (2,B5) | Ary1StVarg | Store | emitted | SafeArray operation: Ary1StVarg. | |
| (2,B7) | Ary1StVargAd | Store | emitted | SafeArray operation: Ary1StVargAd. | |
| (2,B8) | Ary1StVargAdFunc | Store | never | SafeArray operation: Ary1StVargAdFunc. | |
| (2,B6) | Ary1StVargCopy | Store | emitted | SafeArray operation: Ary1StVargCopy. | |
| (2,B9) | Ary1StVargUnk | Store | emitted | SafeArray operation: Ary1StVargUnk. | |
| (2,BA) | Ary1StVargUnkFunc | Store | never | SafeArray operation: Ary1StVargUnkFunc. | |
| (2,8F) | ParmAry1St | Store | emitted | SafeArray operation: ParmAry1St. | |
| (5,02) | StAryCopy | Store | emitted | SafeArray operation: StAryCopy. | |
| (5,01) | StAryMove | Store | emitted | SafeArray operation: StAryMove. | |
| (5,36) | StAryVar | Store | emitted | SafeArray operation: StAryVar. | |
| (4,B0) | VarIndexSt | Store | emitted | SafeArray operation: VarIndexSt. | |
| (4,B1) | VarIndexStAd | Store | emitted | Set an element of a Variant-held array to an object. |
Conversion 140 slots, 91 distinct handlers, 96 emitted
Type conversions, implicit and explicit (CInt, CStr, ...). The detail column gives source -> target.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (2,34) | CAdVar | Convert | emitted | Convert top-of-stack Variant to address. | |
| (0,53) | CBoolCy | Convert | Currency -> Boolean | emitted | Convert top-of-stack Currency to Boolean. |
| (2,55) | CBoolCy | Convert | Currency -> Boolean | never dup | (alias) Convert top-of-stack Currency to Boolean. |
| (2,52) | CBoolI4 | Convert | Long -> Boolean | emitted | Convert top-of-stack Long to Boolean. |
| (2,53) | CBoolR4 | Convert | Single -> Boolean | emitted | Convert top-of-stack Single to Boolean. |
| (2,54) | CBoolR4 | Convert | Single -> Boolean | emitted dup | (alias) Convert top-of-stack Single to Boolean. |
| (2,57) | CBoolStr | Convert | String -> Boolean | emitted | Convert top-of-stack String to Boolean. |
| (2,50) | CBoolUI1 | Convert | Byte -> Boolean | emitted dup | Convert top-of-stack Byte to Boolean. |
| (2,51) | CBoolUI1 | Convert | Byte -> Boolean | emitted | (alias) Convert top-of-stack Byte to Boolean. |
| (2,56) | CBoolVar | Convert | Variant -> Boolean | emitted | Implicitly coerce a Variant to Boolean (assignment, typed argument or typed expression context). |
| (5,1B) | CBoolVarNull | Convert | VarNull -> Boolean | emitted | Type conversion (CBoolVarNull). |
| (0,EF) | CCyI2 | Convert | Integer/Boolean -> Currency | emitted | Convert top-of-stack Integer to Currency. |
| (2,04) | CCyI2 | Convert | Integer/Boolean -> Currency | never dup | (alias) Convert top-of-stack Integer to Currency. |
| (2,05) | CCyI2 | Convert | Integer/Boolean -> Currency | never dup | (alias) Convert top-of-stack Integer to Currency. |
| (0,F0) | CCyI4 | Convert | Long -> Currency | emitted | Convert top-of-stack Long to Currency. |
| (2,06) | CCyI4 | Convert | Long -> Currency | never dup | (alias) Convert top-of-stack Long to Currency. |
| (0,F1) | CCyR4 | Convert | Single -> Currency | emitted | Convert top-of-stack Single to Currency. |
| (2,07) | CCyR4 | Convert | Single -> Currency | never dup | (alias) Convert top-of-stack Single to Currency. |
| (2,08) | CCyR4 | Convert | Single -> Currency | never dup | (alias) Convert top-of-stack Single to Currency. |
| (2,0B) | CCyStr | Convert | String -> Currency | emitted | Convert top-of-stack String to Currency. |
| (2,0A) | CCyVar | Convert | Variant -> Currency | emitted | Implicitly coerce a Variant to Currency (assignment, typed argument or typed expression context). |
| (3,93) | CDargRef | Convert | emitted | Convert top-of-stack Ref to Darg. | |
| (0,F2) | CDateR8 | Convert | Double -> Date | emitted | Type conversion (CDateR8). |
| (2,47) | CDateR8 | Convert | Double -> Date | never dup | (alias) Type conversion (CDateR8). |
| (4,C9) | CDateStr | Convert | String -> Date | emitted | Type conversion (CDateStr). |
| (0,E6) | CI2Cy | Convert | Currency -> Integer/Boolean | emitted | Convert top-of-stack Currency to Integer. |
| (2,19) | CI2Cy | Convert | Currency -> Integer/Boolean | never dup | (alias) Convert top-of-stack Currency to Integer. |
| (0,E4) | CI2I4 | Convert | Long -> Integer/Boolean | emitted | Convert top-of-stack Long to Integer. |
| (2,16) | CI2I4 | Convert | Long -> Integer/Boolean | never dup | (alias) Convert top-of-stack Long to Integer. |
| (0,E5) | CI2R8 | Convert | Double -> Integer/Boolean | emitted | Convert top-of-stack Double to Integer. |
| (2,17) | CI2R8 | Convert | Double -> Integer/Boolean | never dup | (alias) Convert top-of-stack Double to Integer. |
| (2,18) | CI2R8 | Convert | Double -> Integer/Boolean | never dup | (alias) Convert top-of-stack Double to Integer. |
| (2,1B) | CI2Str | Convert | String -> Integer/Boolean | emitted | Convert top-of-stack String to Integer. |
| (2,14) | CI2UI1 | Convert | Byte -> Integer/Boolean | emitted | Convert top-of-stack Byte to Integer. |
| (0,55) | CI2Var | Convert | Variant -> Integer/Boolean | emitted | Implicitly coerce a Variant to Integer (assignment, typed argument or typed expression context). |
| (2,1A) | CI2Var | Convert | Variant -> Integer/Boolean | never dup | (duplicate slot of (0,55) CI2Var) Implicitly coerce a Variant to Integer (assignment, typed argument or typed expression context). |
| (0,E9) | CI4Cy | Convert | Currency -> Long | emitted | Convert top-of-stack Currency to Long. |
| (2,21) | CI4Cy | Convert | Currency -> Long | never dup | (alias) Convert top-of-stack Currency to Long. |
| (0,E8) | CI4R8 | Convert | Double -> Long | emitted | Convert top-of-stack Double to Long. |
| (2,1F) | CI4R8 | Convert | Double -> Long | never dup | (alias) Convert top-of-stack Double to Long. |
| (2,20) | CI4R8 | Convert | Double -> Long | never dup | (alias) Convert top-of-stack Double to Long. |
| (0,50) | CI4Str | Convert | String -> Long | emitted | Convert top-of-stack String to Long. |
| (2,23) | CI4Str | Convert | String -> Long | never dup | (alias) Convert top-of-stack String to Long. |
| (0,E7) | CI4UI1 | Convert | Byte -> Long | emitted | Convert top-of-stack Byte to Long. |
| (2,1C) | CI4UI1 | Convert | Byte -> Long | never dup | (alias) Convert top-of-stack Byte to Long. |
| (2,1D) | CI4UI1 | Convert | Byte -> Long | never dup | (alias) Convert top-of-stack Byte to Long. |
| (2,22) | CI4Var | Convert | Variant -> Long | emitted | Implicitly coerce a Variant to Long (assignment, typed argument or typed expression context). |
| (2,26) | CR4I4 | Convert | Long -> Single | never dup | (duplicate slot of (0,EC) CR8I4) Convert top-of-stack Long to Double. |
| (2,2E) | CR4I4 | Convert | Long -> Single | never dup | (duplicate slot of (0,EC) CR8I4) Convert top-of-stack Long to Double. |
| (0,EA) | CR4R4 | Convert | Single -> Single | emitted | Round the floating-point value on the FPU stack to Single precision. |
| (2,27) | CR4R8 | Convert | Double -> Single | never dup | (duplicate slot of (0,EA) CR4R4) Round the floating-point value on the FPU stack to Single precision. |
| (2,28) | CR4R8 | Convert | Double -> Single | never dup | (duplicate slot of (0,EA) CR4R4) Round the floating-point value on the FPU stack to Single precision. |
| (2,2B) | CR4Str | Convert | String -> Single | emitted | Convert top-of-stack String to Single. |
| (0,42) | CR4Var | Convert | Variant -> Single | emitted dup | Implicitly coerce a Variant to Double (the slot is named CR4Var, but the compiler uses it for Double targets). |
| (0,EE) | CR8Cy | Convert | Currency -> Double | emitted | Convert a Currency on the evaluation stack to floating point (FPU). |
| (2,29) | CR8Cy | Convert | Currency -> Double | never dup | (duplicate slot of (0,EE) CR8Cy) Convert a Currency on the evaluation stack to floating point (FPU). |
| (2,31) | CR8Cy | Convert | Currency -> Double | never dup | (duplicate slot of (0,EE) CR8Cy) Convert a Currency on the evaluation stack to floating point (FPU). |
| (0,EB) | CR8I2 | Convert | Integer/Boolean -> Double | emitted | Convert top-of-stack Integer to Double. |
| (0,EC) | CR8I4 | Convert | Long -> Double | emitted | Convert top-of-stack Long to Double. |
| (2,2F) | CR8R4 | Convert | Single -> Double | never dup | (duplicate slot of (0,ED) CR8R8) Retype the FPU value as Double (used for Date to Double). |
| (2,30) | CR8R4 | Convert | Single -> Double | never dup | (duplicate slot of (0,ED) CR8R8) Retype the FPU value as Double (used for Date to Double). |
| (0,ED) | CR8R8 | Convert | Double -> Double | emitted | Retype the FPU value as Double (used for Date to Double). |
| (2,33) | CR8Str | Convert | String -> Double | emitted | Convert top-of-stack String to Double. |
| (2,2A) | CR8Var | Convert | Variant -> Double | emitted | Implicitly coerce a Variant to Single (the slot is named CR8Var, but the compiler uses it for Single targets). |
| (2,32) | CR8Var | Convert | Variant -> Double | never dup | (duplicate slot of (2,2A) CR8Var) Implicitly coerce a Variant to Single (the slot is named CR8Var, but the compiler uses it for Single targets). |
| (2,35) | CRefVarAry | Convert | emitted | Type conversion (CRefVarAry). | |
| (2,3F) | CSng | Convert | Double/Date -> Single | never dup | Type conversion (CSng). |
| (2,40) | CSng | Convert | Double/Date -> Single | emitted | (alias) Type conversion (CSng). |
| (0,34) | CStr2Ansi | Convert | 2Ansi -> String | emitted | Convert a String argument from Unicode to ANSI for a Declare'd API call. |
| (2,5A) | CStr2Ansi | Convert | 2Ansi -> String | never dup | (duplicate slot of (0,34) CStr2Ansi) Convert a String argument from Unicode to ANSI for a Declare'd API call. |
| (2,58) | CStr2Uni | Convert | 2Uni -> String | emitted | Convert a String from ANSI back to Unicode after a Declare'd API call. |
| (2,5F) | CStr2Vec | Convert | 2Vec -> String | emitted | Convert a String to a Byte array (b() = s). |
| (2,5B) | CStrAry2Ansi | Convert | Ary2Ansi -> String | emitted | Type conversion (CStrAry2Ansi). |
| (2,59) | CStrAry2Uni | Convert | Ary2Uni -> String | emitted | Type conversion (CStrAry2Uni). |
| (4,C7) | CStrBool | Convert | Boolean -> String | emitted | Convert top-of-stack Boolean to String. |
| (2,01) | CStrCy | Convert | Currency -> String | emitted | Convert top-of-stack Currency to String. |
| (4,C8) | CStrDate | Convert | Date -> String | emitted | Type conversion (CStrDate). |
| (1,FC) | CStrI2 | Convert | Integer/Boolean -> String | emitted dup | Convert a Byte to a String. (The slot is named CStrI2, but the compiler uses it for Byte sources.) |
| (1,FE) | CStrI4 | Convert | Long -> String | emitted | Convert top-of-stack Long to String. |
| (1,FF) | CStrR4 | Convert | Single -> String | emitted | Convert top-of-stack Single to String. |
| (2,00) | CStrR8 | Convert | Double -> String | emitted | Convert top-of-stack Double to String. |
| (1,FD) | CStrUI1 | Convert | Byte -> String | emitted | Convert an Integer (or Boolean) to a String. (The slot is named CStrUI1, but the compiler uses it for Integer sources.) |
| (2,02) | CStrVar | Convert | Variant -> String | emitted | Implicitly coerce a Variant to String (assignment, typed argument or typed expression context). |
| (0,60) | CStrVarTmp | Convert | VarTmp -> String | emitted | Convert a Variant temporary to a String and free the temporary. |
| (3,FD) | CStrVarTmp | Convert | VarTmp -> String | never dup | (duplicate slot of (0,60) CStrVarTmp) Convert a Variant temporary to a String and free the temporary. |
| (3,FE) | CStrVarVal | Convert | VarVal -> String | emitted | Convert a Variant to a String in a temporary, without consuming the Variant (ByVal String argument). |
| (2,38) | CUI1Bool | Convert | Boolean -> Byte | emitted | Convert top-of-stack Boolean to Byte. |
| (2,11) | CUI1Cy | Convert | Currency -> Byte | emitted | Convert top-of-stack Currency to Byte. |
| (2,0D) | CUI1I2 | Convert | Integer/Boolean -> Byte | emitted | Convert top-of-stack Integer to Byte. |
| (2,0E) | CUI1I4 | Convert | Long -> Byte | emitted | Convert top-of-stack Long to Byte. |
| (2,0F) | CUI1R4 | Convert | Single -> Byte | emitted | Convert top-of-stack Single to Byte. |
| (2,10) | CUI1R4 | Convert | Single -> Byte | emitted dup | (alias) Convert top-of-stack Single to Byte. |
| (2,13) | CUI1Str | Convert | String -> Byte | emitted | Convert top-of-stack String to Byte. |
| (2,12) | CUI1Var | Convert | Variant -> Byte | emitted | Implicitly coerce a Variant to Byte (assignment, typed argument or typed expression context). |
| (2,71) | CUnkVar | Convert | emitted | Type conversion (CUnkVar). | |
| (2,60) | CVar2Vec | Convert | 2Vec -> Variant | emitted | Type conversion (CVar2Vec). |
| (3,6F) | CVarAd | Convert | object -> Variant | emitted | Wrap an object reference in a Variant (VT_DISPATCH) temporary. |
| (3,FC) | CVarAryVarg | Convert | AryVarg -> Variant | never | |
| (3,F8) | CVarBoolI2 | Convert | BoolI2 -> Variant | emitted | Convert top-of-stack Integer to VarBool. |
| (0,3F) | CVarCy | Convert | Currency -> Variant | emitted | Convert a Currency to a Variant (VT_CY) in a temporary. |
| (3,6C) | CVarCy | Convert | Currency -> Variant | never dup | Convert a Currency to a Variant (VT_CY) in a temporary. |
| (3,FB) | CVarDate | Convert | Date -> Variant | emitted | Convert a Date to a Variant (VT_DATE) in a temporary. |
| (3,F9) | CVarDateVar | Convert | DateVar -> Variant | never | |
| (3,FA) | CVarErrI4 | Convert | ErrI4 -> Variant | emitted | Build a VT_ERROR Variant from a Long (CVErr). |
| (0,44) | CVarI2 | Convert | Integer/Boolean -> Variant | emitted | (alias) Convert top-of-stack Integer to Variant. |
| (3,68) | CVarI2 | Convert | Integer/Boolean -> Variant | never dup | (alias) Convert top-of-stack Integer to Variant. |
| (3,69) | CVarI4 | Convert | Long -> Variant | emitted | Convert top-of-stack Long to Variant. |
| (3,6A) | CVarR4 | Convert | Single -> Variant | emitted | Convert top-of-stack Single to Variant. |
| (3,6B) | CVarR8 | Convert | Double -> Variant | emitted | Convert top-of-stack Double to Variant. |
| (0,4D) | CVarRef | Convert | Ref -> Variant | emitted | Pass a typed variable ByRef to a Variant parameter (build a VT_BYREF Variant in a temporary). |
| (3,94) | CVarRef | Convert | Ref -> Variant | never dup | Pass a typed variable ByRef to a Variant parameter (build a VT_BYREF Variant in a temporary). |
| (0,46) | CVarStr | Convert | String -> Variant | emitted | Convert top-of-stack String to Variant. |
| (3,6E) | CVarStr | Convert | String -> Variant | never dup | Convert top-of-stack String to Variant. |
| (3,67) | CVarUI1 | Convert | Byte -> Variant | emitted | Convert top-of-stack Byte to Variant. |
| (2,72) | CVarUnk | Convert | IUnknown -> Variant | emitted | Convert an IUnknown reference to a Variant (VT_UNKNOWN). |
| (2,61) | CVec2Var | Convert | never | ||
| (2,4D) | FnCBoolVar | Convert | Variant -> Boolean | emitted | Type conversion (FnCBoolVar). |
| (2,44) | FnCByteVar | Convert | Variant -> Byte | emitted | Type conversion (FnCByteVar). |
| (2,49) | FnCCurVar | Convert | Variant -> Currency | emitted | Type conversion (FnCCurVar). |
| (2,4E) | FnCDateVar | Convert | Variant -> Date | emitted | Type conversion (FnCDateVar). |
| (2,4F) | FnCDateVar | Convert | Variant -> Date | emitted dup | (alias) Type conversion (FnCDateVar). |
| (2,39) | FnCDblCy | Convert | Currency -> Double | emitted | Type conversion (FnCDblCy). |
| (2,3A) | FnCDblR8 | Convert | Double -> Double | emitted | Type conversion (FnCDblR8). |
| (2,3B) | FnCDblR8 | Convert | Double -> Double | emitted dup | (alias) Type conversion (FnCDblR8). |
| (2,48) | FnCDblVar | Convert | Variant -> Double | emitted | Type conversion (FnCDblVar). |
| (2,45) | FnCIntVar | Convert | Variant -> Integer | emitted | Type conversion (FnCIntVar). |
| (2,46) | FnCLngVar | Convert | Variant -> Long | emitted | Type conversion (FnCLngVar). |
| (2,41) | FnCSngCy | Convert | Currency -> Single | emitted | Type conversion (FnCSngCy). |
| (2,24) | FnCSngI2 | Convert | Integer/Boolean -> Single | never dup | Type conversion (FnCSngI2). |
| (2,25) | FnCSngI2 | Convert | Integer/Boolean -> Single | never dup | (alias) Type conversion (FnCSngI2). |
| (2,2C) | FnCSngI2 | Convert | Integer/Boolean -> Single | never dup | (alias) Type conversion (FnCSngI2). |
| (2,2D) | FnCSngI2 | Convert | Integer/Boolean -> Single | never dup | (alias) Type conversion (FnCSngI2). |
| (2,3C) | FnCSngI2 | Convert | Integer/Boolean -> Single | never dup | (alias) Type conversion (FnCSngI2). |
| (2,3D) | FnCSngI2 | Convert | Integer/Boolean -> Single | never dup | (alias) Type conversion (FnCSngI2). |
| (2,3E) | FnCSngI4 | Convert | Long -> Single | emitted | Type conversion (FnCSngI4). |
| (2,43) | FnCSngStr | Convert | String -> Single | emitted dup | Type conversion (FnCSngStr). |
| (2,42) | FnCSngVar | Convert | Variant -> Single | emitted | Type conversion (FnCSngVar). |
| (2,4B) | FnCStrVar | Convert | Variant -> String | emitted | Type conversion (FnCStrVar). |
| (0,5D) | HardType | Convert | emitted | Type conversion (HardType). | |
| (3,02) | HardType | Convert | never dup | (alias) Type conversion (HardType). |
Control flow 27 slots, 18 distinct handlers, 15 emitted
Branches, statement boundaries (BoS), GoSub/On GoTo, End/Stop and For Each exits.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (5,0B) | Assert | Branch/loop | never | Control-flow primitive: Assert. | |
| (0,00) | BoS | Branch/loop | emitted | Control-flow primitive: BoS. | |
| (0,02) | BoS | Branch/loop | never dup | (alias) Control-flow primitive: BoS. | |
| (2,C4) | BoS | Branch/loop | never dup | Control-flow primitive: BoS. | |
| (5,1C) | BoS | Branch/loop | never dup | Control-flow primitive: BoS. | |
| (0,1E) | Branch | Branch/loop | emitted | Control flow branch (Branch). | |
| (3,03) | Branch | Branch/loop | never dup | Control flow branch (Branch). | |
| (0,1C) | BranchF | Branch/loop | emitted | Control flow branch (BranchF). | |
| (3,04) | BranchF | Branch/loop | never dup | Control flow branch (BranchF). | |
| (0,5C) | BranchFVar | Branch/loop | never | ||
| (3,05) | BranchFVar | Branch/loop | never dup | ||
| (3,06) | BranchFVarFree | Branch/loop | never | ||
| (0,1D) | BranchT | Branch/loop | emitted | Pop a Boolean and branch if it is True. | |
| (3,07) | BranchT | Branch/loop | never dup | Pop a Boolean and branch if it is True. | |
| (3,08) | BranchTVar | Branch/loop | never | ||
| (3,09) | BranchTVarFree | Branch/loop | never | ||
| (2,C8) | End | Branch/loop | emitted | Control-flow primitive: End. | |
| (3,CE) | ExitForAryVar | Branch/loop | For Each exit | emitted | Exit For out of a For Each loop over an array, with a Variant control variable. |
| (3,CB) | ExitForCollObj | Branch/loop | For Each exit | emitted dup | Exit For out of a For Each over a collection whose control variable is a specific class. |
| (3,CC) | ExitForCollObj | Branch/loop | For Each exit | emitted dup | Exit For out of a For Each over a collection whose control variable is a specific class. |
| (3,CD) | ExitForCollObj | Branch/loop | For Each exit | emitted | Exit For out of a For Each over a collection whose control variable is a specific class. |
| (3,CF) | ExitForVar | Branch/loop | For Each exit | emitted | Exit For out of a For Each over a Variant-held collection/array. |
| (3,0A) | Gosub | Branch/loop | emitted | Push a return address and jump to a local GoSub label. | |
| (4,95) | OnGosub | Branch/loop | emitted | Computed On n GoSub: pop an Integer selector and GoSub to the n-th label. | |
| (4,96) | OnGoto | Branch/loop | emitted | Computed On n GoTo: pop an Integer selector and jump to the n-th label. | |
| (2,C9) | Return | Branch/loop | emitted | Control-flow primitive: Return. | |
| (2,C2) | Stop | Branch/loop | emitted | Control-flow primitive: Stop. |
Error handling 7 slots, 4 distinct handlers, 4 emitted
On Error, Resume, Error and the LastDllError capture after Declare calls.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (0,45) | Error | Other | emitted | Error n statement: raise run-time error n. | |
| (2,C1) | Error | Other | never dup | (duplicate slot of (0,45) Error) Error n statement: raise run-time error n. | |
| (0,4B) | OnErrorGoto | Other | emitted | On Error statement: set the procedure's error-handling mode. | |
| (3,0B) | OnErrorGoto | Other | never dup | On Error statement: set the procedure's error-handling mode. | |
| (3,0C) | Resume | Other | emitted | Resume statement: leave an error handler and continue execution. | |
| (0,3C) | SetLastSystemError | Other | emitted | Capture GetLastError after a Declare'd API call (for Err.LastDllError). | |
| (2,62) | SetLastSystemError | Other | never dup | (duplicate slot of (0,3C) SetLastSystemError) Capture GetLastError after a Declare'd API call (for Err.LastDllError). |
Procedure call/return 37 slots, 18 distinct handlers, 16 emitted
Calls to module procedures, Declare'd APIs and runtime functions, and procedure epilogues (ExitProc*).
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (0,0C) | ImpAdCallCy | Call | module procedure / Declare / runtime | emitted | Call a procedure/import that returns Currency (EDX:EAX); push the result. |
| (4,25) | ImpAdCallCy | Call | module procedure / Declare / runtime | never dup | Call a procedure/import that returns Currency (EDX:EAX); push the result. |
| (0,0A) | ImpAdCallFPR4 | Call | module procedure / Declare / runtime | emitted | Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns. |
| (4,29) | ImpAdCallFPR4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns. |
| (4,2A) | ImpAdCallFPR4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns. |
| (4,2C) | ImpAdCallFPR4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import whose result is not returned in EAX: Subs, discarded results, and FPU/Variant returns. |
| (0,09) | ImpAdCallHresult | Call | module procedure / Declare / runtime | emitted | Call an HRESULT-returning runtime helper; raise on failure. |
| (4,4F) | ImpAdCallHresult | Call | module procedure / Declare / runtime | never dup | Call an HRESULT-returning runtime helper; raise on failure. |
| (0,0B) | ImpAdCallI2 | Call | module procedure / Declare / runtime | emitted | Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns). |
| (0,5E) | ImpAdCallI4 | Call | module procedure / Declare / runtime | emitted dup | Call a procedure or import and push its 32-bit Long result (EAX). |
| (4,21) | ImpAdCallI4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns). |
| (4,22) | ImpAdCallI4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns). |
| (4,27) | ImpAdCallI4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns). |
| (4,28) | ImpAdCallI4 | Call | module procedure / Declare / runtime | never dup | Call a procedure or import and push its 32-bit EAX result (Integer, Boolean, String or Object returns). |
| (5,1E) | ImpAdCallNonVirt | Call | module procedure / Declare / runtime | emitted | Non-virtual (direct) call to a Friend procedure of a class. |
| (4,23) | ImpAdCallR4 | Call | module procedure / Declare / runtime | never | |
| (4,24) | ImpAdCallR8 | Call | module procedure / Declare / runtime | never | |
| (4,20) | ImpAdCallUI1 | Call | module procedure / Declare / runtime | emitted | Call a runtime/import function that returns a Byte (AL); push the result. |
| (3,95) | ExitProcCb | Return | Variant via buffer | emitted | Return from a module Function returning a Variant (copy the result to the caller's buffer). |
| (5,2F) | ExitProcCbHresult | Return | COM method value | emitted | Return from a class/form method that produces a value: copy it to the [out, retval] parameter and return S_OK. |
| (3,96) | ExitProcCbStack | Return | stack args | never | |
| (0,18) | ExitProcCy | Return | Currency | emitted | Return from a Function whose return type is Currency. |
| (2,D1) | ExitProcCy | Return | Currency | never dup | Return from a Function whose return type is Currency. |
| (0,13) | ExitProcHresult | Return | COM method (HRESULT) | emitted | Return S_OK from a class/form method that produces no value (Sub, Property Let/Set). |
| (2,6D) | ExitProcHresult | Return | COM method (HRESULT) | never dup | Return S_OK from a class/form method that produces no value (Sub, Property Let/Set). |
| (0,15) | ExitProcI2 | Return | Integer/Boolean | emitted | Return from a module Function returning Integer or Boolean. |
| (2,CD) | ExitProcI2 | Return | Integer/Boolean | never dup | Return from a module Function returning Integer or Boolean. |
| (0,14) | ExitProcI4 | Return | Long/String/Sub | emitted | Return from a module Sub, or from a Function returning Long or String. |
| (0,16) | ExitProcR4 | Return | Single | emitted | Return from a module Function returning Single (FPU). |
| (2,CF) | ExitProcR4 | Return | Single | never dup | Return from a module Function returning Single (FPU). |
| (0,17) | ExitProcR8 | Return | Double/Date | emitted | Return from a Function whose return type is Double or Date (FPU return). |
| (2,D0) | ExitProcR8 | Return | Double/Date | never dup | Return from a Function whose return type is Double or Date (FPU return). |
| (2,CE) | ExitProcStr | Return | String | never dup | Return from a module Sub, or from a Function returning Long or String. |
| (2,D3) | ExitProcStr | Return | String | never dup | (duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String. |
| (2,D4) | ExitProcStr | Return | String | never dup | (duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String. |
| (2,D5) | ExitProcStr | Return | String | never dup | (duplicate slot of (0,14) ExitProcI4) Return from a module Sub, or from a Function returning Long or String. |
| (2,CC) | ExitProcUI1 | Return | Byte | emitted | Return from a Function whose return type is Byte. |
File I/O & Print 43 slots, 43 distinct handlers, 20 emitted
Open/Close, Get/Put, Input/Write/Print #, Lock and Seek, plus the never-emitted legacy per-item Print opcodes.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (3,3D) | Close | I/O | emitted | File I/O primitive: Close. | |
| (3,3E) | CloseAll | I/O | emitted | File I/O primitive: CloseAll. | |
| (2,75) | GetRec3 | I/O | emitted | File I/O primitive: GetRec3. | |
| (2,76) | GetRec4 | I/O | emitted | File I/O primitive: GetRec4. | |
| (5,12) | GetRecFxStr3 | I/O | emitted | File I/O primitive: GetRecFxStr3. | |
| (5,13) | GetRecFxStr4 | I/O | emitted | File I/O primitive: GetRecFxStr4. | |
| (2,7D) | Input | I/O | never | File I/O primitive: Input. | |
| (2,7E) | InputDone | I/O | never | File I/O primitive: InputDone. | |
| (5,10) | InputFile | I/O | emitted | Input # statement: read a list of items, one descriptor-driven call. | |
| (2,87) | InputItemBool | I/O | never | File I/O primitive: InputItemBool. | |
| (2,84) | InputItemCy | I/O | never | File I/O primitive: InputItemCy. | |
| (2,88) | InputItemDate | I/O | never | File I/O primitive: InputItemDate. | |
| (2,80) | InputItemI2 | I/O | never | File I/O primitive: InputItemI2. | |
| (2,81) | InputItemI4 | I/O | never | File I/O primitive: InputItemI4. | |
| (2,82) | InputItemR4 | I/O | never | File I/O primitive: InputItemR4. | |
| (2,83) | InputItemR8 | I/O | never | File I/O primitive: InputItemR8. | |
| (2,86) | InputItemStr | I/O | never | File I/O primitive: InputItemStr. | |
| (2,7F) | InputItemUI1 | I/O | never | File I/O primitive: InputItemUI1. | |
| (2,85) | InputItemVar | I/O | never | File I/O primitive: InputItemVar. | |
| (2,C0) | LineInputStr | I/O | emitted | File I/O primitive: LineInputStr. | |
| (2,BF) | LineInputVar | I/O | emitted | File I/O primitive: LineInputVar. | |
| (4,5E) | LockFile | I/O | emitted | Lock / Unlock statement. | |
| (1,FB) | NameFile | I/O | emitted | File I/O primitive: NameFile. | |
| (4,5D) | OpenFile | I/O | emitted | Open statement: pop file name, file number and record length; open the file. | |
| (3,32) | PrintChan | I/O | never | Legacy per-item Print opcode (selects the output channel (file number)); never emitted by VB6 SP6. | |
| (3,34) | PrintComma | I/O | never | Legacy per-item Print opcode (advances to the next print zone (,)); never emitted by VB6 SP6. | |
| (3,35) | PrintEos | I/O | never | Legacy per-item Print opcode (ends the statement (flushes, no newline)); never emitted by VB6 SP6. | |
| (5,0E) | PrintFile | I/O | emitted | Write a value to a #-numbered file or to the immediate window. | |
| (3,37) | PrintItemComma | I/O | never | Legacy per-item Print opcode (prints one item followed by ,); never emitted by VB6 SP6. | |
| (3,39) | PrintItemNL | I/O | never | Legacy per-item Print opcode (prints one item followed by a newline); never emitted by VB6 SP6. | |
| (3,38) | PrintItemSemi | I/O | never | Legacy per-item Print opcode (prints one item followed by ;); never emitted by VB6 SP6. | |
| (3,36) | PrintNL | I/O | never | Legacy per-item Print opcode (writes a newline); never emitted by VB6 SP6. | |
| (3,3A) | PrintObj | I/O | never | ||
| (5,0D) | PrintObject | I/O | emitted | Print method on an object (form, picture box, Printer): one descriptor-driven call for the whole item list. | |
| (3,3B) | PrintSpc | I/O | never | Legacy per-item Print opcode (writes Spc(n) spaces); never emitted by VB6 SP6. | |
| (3,3C) | PrintTab | I/O | never | Legacy per-item Print opcode (moves to Tab(n) column); never emitted by VB6 SP6. | |
| (2,77) | PutRec3 | I/O | emitted | File I/O primitive: PutRec3. | |
| (2,78) | PutRec4 | I/O | emitted | File I/O primitive: PutRec4. | |
| (5,14) | PutRecFxStr3 | I/O | emitted | File I/O primitive: PutRecFxStr3. | |
| (5,15) | PutRecFxStr4 | I/O | emitted | File I/O primitive: PutRecFxStr4. | |
| (1,FA) | SeekFile | I/O | emitted | File I/O primitive: SeekFile. | |
| (3,33) | WriteChan | I/O | never | File I/O primitive: WriteChan. | |
| (5,0F) | WriteFile | I/O | emitted | Write # statement: write a list of items, one descriptor-driven call. |
Stack & frame 56 slots, 33 distinct handlers, 26 emitted
Frame-slot references, temporaries, pops and cleanup (FFree*) that are not tied to one value type.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (0,1A) | FFree1Ad | Free/cleanup | String/Variant/object temporaries | emitted | Free heap-backed frame slot(s): FFree1Ad. |
| (3,9B) | FFree1Ad | Free/cleanup | String/Variant/object temporaries | never dup | Free heap-backed frame slot(s): FFree1Ad. |
| (0,2F) | FFree1Str | Free/cleanup | String/Variant/object temporaries | emitted | Free heap-backed frame slot(s): FFree1Str. |
| (3,9A) | FFree1Str | Free/cleanup | String/Variant/object temporaries | never dup | Free heap-backed frame slot(s): FFree1Str. |
| (0,35) | FFree1Var | Free/cleanup | String/Variant/object temporaries | emitted | Free heap-backed frame slot(s): FFree1Var. |
| (3,99) | FFree1Var | Free/cleanup | String/Variant/object temporaries | never dup | Free heap-backed frame slot(s): FFree1Var. |
| (0,29) | FFreeAd | Free/cleanup | String/Variant/object temporaries | emitted | Free heap-backed frame slot(s): FFreeAd. |
| (4,B4) | FFreeAd | Free/cleanup | String/Variant/object temporaries | never dup | Free heap-backed frame slot(s): FFreeAd. |
| (0,32) | FFreeStr | Free/cleanup | String/Variant/object temporaries | emitted | Free heap-backed frame slot(s): FFreeStr. |
| (4,B3) | FFreeStr | Free/cleanup | String/Variant/object temporaries | never dup | Free heap-backed frame slot(s): FFreeStr. |
| (0,36) | FFreeVar | Free/cleanup | String/Variant/object temporaries | emitted | Free heap-backed frame slot(s): FFreeVar. |
| (4,B2) | FFreeVar | Free/cleanup | String/Variant/object temporaries | never dup | Free heap-backed frame slot(s): FFreeVar. |
| (4,CE) | FreeAdNoPop | Free/cleanup | String/Variant/object temporaries | never | Free heap-backed frame slot(s): FreeAdNoPop. |
| (4,CC) | FreeStrNoPop | Free/cleanup | String/Variant/object temporaries | never | Free heap-backed frame slot(s): FreeStrNoPop. |
| (4,CD) | FreeVarNoPop | Free/cleanup | String/Variant/object temporaries | never | Free heap-backed frame slot(s): FreeVarNoPop. |
| (0,07) | FMemLdRf | Load | address (reference), via frame pointer | emitted | Load a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf). |
| (3,D6) | FMemLdRf | Load | address (reference), via frame pointer | never dup | Load a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf). |
| (3,DC) | FMemLdRf | Load | address (reference), via frame pointer | never dup | Load a reference (ByRef slot) via [frame[%a] + offset] (FMemLdRf). |
| (0,6C) | ILdRf | Load | address (reference), ByRef/indirect | emitted | Re-load the pointer held in a ByRef frame slot [ebp+%a]; push it as a typed reference. |
| (3,4C) | IWMemLdRf | Load | address (reference), W-base indirect | never | LOAD through a reference / ByRef slot at [W-base+offset] -> [eax], one extra dereference (4-byte (reference), W+indirect). |
| (0,05) | ImpAdLdRf | Load | address (reference), global | emitted | Load through an imported address (ImpAdLdRf). |
| (3,A6) | ImpAdLdRf | Load | address (reference), global | never dup | Load through an imported address (ImpAdLdRf). |
| (3,AC) | ImpAdLdRf | Load | address (reference), global | never dup | Load through an imported address (ImpAdLdRf). |
| (4,F6) | DestructAnsiOFrame | Other | emitted | Frame-slot manipulation (DestructAnsiOFrame). | |
| (0,04) | FLdRfVar | Other | emitted | Push a reference (ByRef pointer) to a Variant local/argument at [ebp+%a]. | |
| (2,E6) | FLdRfVar | Other | never dup | Push a reference (ByRef pointer) to a Variant local/argument at [ebp+%a]. | |
| (2,EC) | FLdRfVar | Other | never dup | Push a reference (ByRef pointer) to a Variant local/argument at [ebp+%a]. | |
| (4,2F) | LdFrameRf | Other | never | ||
| (4,2E) | LdStkRf | Other | never | ||
| (0,06) | MemLdRfVar | Other | emitted | Load a ByRef Variant slot from [pr + offset] where pr is on the stack. | |
| (3,76) | MemLdRfVar | Other | never dup | Load a ByRef Variant slot from [pr + offset] where pr is on the stack. | |
| (3,7C) | MemLdRfVar | Other | never dup | Load a ByRef Variant slot from [pr + offset] where pr is on the stack. | |
| (2,8B) | PopAd | Other | emitted | Discard the top raw 32-bit address (pointer) from the stack. | |
| (0,49) | PopAdLd4 | Other | emitted | Discard the top value from the stack. | |
| (2,5C) | PopAdLd4 | Other | never dup | (alias) Discard the top value from the stack. | |
| (0,25) | PopAdLdVar | Other | emitted | Discard the top VBA Variant from the stack. | |
| (2,8C) | PopAdLdVar | Other | never dup | (alias) Discard the top VBA Variant from the stack. | |
| (0,37) | PopFPR4 | Other | emitted | Discard the top Single on the x87 FPU stack from the stack. | |
| (2,89) | PopFPR4 | Other | never dup | (alias) Discard the top Single on the x87 FPU stack from the stack. | |
| (0,39) | PopFPR8 | Other | emitted | Discard the top Double on the x87 FPU stack from the stack. | |
| (2,8A) | PopFPR8 | Other | never dup | (alias) Discard the top Double on the x87 FPU stack from the stack. | |
| (3,C2) | PopTmpLdAd1 | Other | emitted | Pop temporary and reload value (PopTmpLdAd1). | |
| (0,2B) | PopTmpLdAd2 | Other | emitted | Pop temporary and reload value (PopTmpLdAd2). | |
| (3,C3) | PopTmpLdAd2 | Other | never dup | Pop temporary and reload value (PopTmpLdAd2). | |
| (0,30) | PopTmpLdAd8 | Other | emitted | Pop an 8-byte value into a temporary and push the temporary's address (ByRef temp for Currency). | |
| (3,C5) | PopTmpLdAd8 | Other | never dup | Pop an 8-byte value into a temporary and push the temporary's address (ByRef temp for Currency). | |
| (3,C8) | PopTmpLdAdFPR4 | Other | emitted | Pop a Single from the FPU into a temporary and push its address (ByRef temp). | |
| (3,C9) | PopTmpLdAdFPR8 | Other | emitted | Pop a Double from the FPU into a temporary and push its address (ByRef temp). | |
| (0,59) | PopTmpLdAdStr | Other | emitted | (alias) Pop temporary and reload value (PopTmpLdAdStr). | |
| (3,C4) | PopTmpLdAdStr | Other | never dup | (alias) Pop temporary and reload value (PopTmpLdAdStr). | |
| (3,C7) | PopTmpLdAdStr | Other | emitted dup | (alias) Pop temporary and reload value (PopTmpLdAdStr). | |
| (3,C6) | PopTmpLdAdVar | Other | never | ||
| (4,D6) | WMemLdRfVar | Other | never | LOAD a Variant ByRef reference at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (reference)). | |
| (4,DC) | WMemLdRfVar | Other | never dup | LOAD a Variant ByRef reference at [W-base+offset] via the procedure's secondary-object pointer [ebp+10h] (W-base) (4-byte (reference)). | |
| (5,2D) | ZeroRetVal | Other | emitted | Frame-slot manipulation (ZeroRetVal). | |
| (5,2E) | ZeroRetValVar | Other | emitted | Frame-slot manipulation (ZeroRetValVar). |
Structural 7 slots, 6 distinct handlers, 0 emitted
Dispatch-table trampolines (lead bytes) and invalid slots.
| Slot | Mnemonic | Operation | Types | Status | Summary |
|---|---|---|---|---|---|
| (0,03) | InvalidExcode | Other | dispatch trampoline / invalid slot | - dup | |
| (0,FB) | Lead0 | Other | dispatch trampoline / invalid slot | - | |
| (0,FC) | Lead1 | Other | dispatch trampoline / invalid slot | - | |
| (0,FD) | Lead2 | Other | dispatch trampoline / invalid slot | - | |
| (0,FE) | Lead3 | Other | dispatch trampoline / invalid slot | - | |
| (0,FF) | Lead4 | Other | dispatch trampoline / invalid slot | - | |
| (0,01) | vbDecNop | Other | dispatch trampoline / invalid slot | - |
Array
Single/multi-dim array access
ArrayRebase1Var
(5,0x0A)emittedhandler #736Arrayconfirmed_msdocsArrayRebase1Var.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Option Base 1
Public Sub Main()
Dim v As Variant
v = Array(1, 2)
End Sub
Encoding, evidence and notes
Encoding: FF 0A (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF0A ArrayRebase1Var
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0A_ArrayRebase1Var.
Handler: 0x661091F7, unique to this slot (real opcode #736).
Description: draft, by claude-opus-4.7. Handler 0x661091F7, dispatch slot 0x6610813C, modOpcodes line 620.
Ary1LdCy
(0,0x9F)emittedprimary of 3handler #156Arrayconfirmed_msdocsAry1LdCy.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Currency, b As Currency, i As Long
b = a(i)
End Sub
Encoding, evidence and notes
Encoding: 9F, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 9F Ary1LdCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9F_Ary1LdCy.
Handler: 0x66108EC0, shared by 3 dispatch slots (real opcode #156). This is the primary slot. Other slots: (2,94) Ary1LdR8, (2,95) Ary1LdR8.
(2,0x94) Ary1LdR8, (2,0x95) Ary1LdR8
Description: draft, by claude-opus-4.7. Handler 0x66108EC0, dispatch slot 0x66106F90, modOpcodes line 664.
Ary1LdFPR4
(0,0xA0)emittedprimary of 2handler #157Arrayconfirmed_msdocsAry1LdFPR4.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Single, b As Single, i As Long
b = a(i)
End Sub
Encoding, evidence and notes
Encoding: A0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A0 Ary1LdFPR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A0_Ary1LdFPR4.
Handler: 0x66108ED8, shared by 2 dispatch slots (real opcode #157). This is the primary slot. Other slots: (2,99) Ary1LdFPR4.
Description: draft, by claude-opus-4.7. Handler 0x66108ED8, dispatch slot 0x66106F94, modOpcodes line 666.
Ary1LdFPR4
(2,0x99)not emitteddup of (0,A0)handler #157Arrayconfirmed_handlerAry1LdFPR4.Alias dispatch slot (2, 0x99) for the canonical Ary1LdFPR4 at (0, 0xA0); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 99 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108ED8, shared by 2 dispatch slots (real opcode #157). This is a duplicate slot of (0,A0) Ary1LdFPR4. Other slots: (0,A0) Ary1LdFPR4.
Description: draft, by claude-opus-4.7. Handler 0x66108ED8, dispatch slot 0x66107778, modOpcodes line 672.
Ary1LdFPR8
(0,0xA1)emittedprimary of 2handler #158Arrayconfirmed_msdocsAry1LdFPR8.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Date, b As Date, i As Long
b = a(i)
End Sub
Encoding, evidence and notes
Encoding: A1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A1 Ary1LdFPR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A1_Ary1LdFPR8.
Handler: 0x66108EEC, shared by 2 dispatch slots (real opcode #158). This is the primary slot. Other slots: (2,9A) Ary1LdFPR8.
Description: draft, by claude-opus-4.7. Handler 0x66108EEC, dispatch slot 0x66106F98, modOpcodes line 668.
Ary1LdFPR8
(2,0x9A)not emitteddup of (0,A1)handler #158Arrayconfirmed_handlerAry1LdFPR8.Alias dispatch slot (2, 0x9A) for the canonical Ary1LdFPR8 at (0, 0xA1); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 9A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EEC, shared by 2 dispatch slots (real opcode #158). This is a duplicate slot of (0,A1) Ary1LdFPR8. Other slots: (0,A1) Ary1LdFPR8.
Description: draft, by claude-opus-4.7. Handler 0x66108EEC, dispatch slot 0x6610777C, modOpcodes line 673.
Ary1LdI2
(0,0x9D)emittedprimary of 2handler #154Arrayconfirmed_msdocsAry1LdI2.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Boolean, b As Boolean, i As Long
b = a(i)
End Sub
Encoding, evidence and notes
Encoding: 9D, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 9D Ary1LdI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9D_Ary1LdI2.
Handler: 0x66108E96, shared by 2 dispatch slots (real opcode #154). This is the primary slot. Other slots: (2,91) Ary1LdI2.
Description: draft, by claude-opus-4.7. Handler 0x66108E96, dispatch slot 0x66106F88, modOpcodes line 651.
Ary1LdI2
(2,0x91)not emitteddup of (0,9D)handler #154Arrayconfirmed_handlerAry1LdI2.Alias dispatch slot (2, 0x91) for the canonical Ary1LdI2 at (0, 0x9D); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 91 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108E96, shared by 2 dispatch slots (real opcode #154). This is a duplicate slot of (0,9D) Ary1LdI2. Other slots: (0,9D) Ary1LdI2.
Description: draft, by claude-opus-4.7. Handler 0x66108E96, dispatch slot 0x66107758, modOpcodes line 652.
Ary1LdI4
(0,0x9E)emittedprimary of 5handler #155Arrayconfirmed_msdocs55 corpus hitsAry1LdI4.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Option Base 1
Public Sub Main()
Dim a(5) As Long, n As Long
n = a(1)
End Sub
Encoding, evidence and notes
Encoding: 9E, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 9E Ary1LdI4
Form1.LoadPlugins @ 0x4644FC | 464723 9E Ary1LdI4
Form1.LoadPlugins @ 0x4644FC | 4647D4 9E Ary1LdI4
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C44E 9E Ary1LdI4
55 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9E_Ary1LdI4.
Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is the primary slot. Other slots: (2,92) Ary1LdI4, (2,93) Ary1LdI4, (2,97) Ary1LdI4, (2,98) Ary1LdI4.
Corpus: 55 occurrence(s) in PDFStreamDumper_p.exe.
(2,0x92) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x97) Ary1LdI4, (2,0x98) Ary1LdI4
Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66106F8C, modOpcodes line 655.
Ary1LdI4
(2,0x92)not emitteddup of (0,9E)handler #155Arrayconfirmed_handlerAry1LdI4.Alias dispatch slot (2, 0x92) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 92 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,93) Ary1LdI4, (2,97) Ary1LdI4, (2,98) Ary1LdI4.
(0,0x9E) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x97) Ary1LdI4, (2,0x98) Ary1LdI4
Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x6610775C, modOpcodes line 656.
Ary1LdI4
(2,0x93)not emitteddup of (0,9E)handler #155Arrayconfirmed_handlerAry1LdI4.Alias dispatch slot (2, 0x93) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 93 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,92) Ary1LdI4, (2,97) Ary1LdI4, (2,98) Ary1LdI4.
(0,0x9E) Ary1LdI4, (2,0x92) Ary1LdI4, (2,0x97) Ary1LdI4, (2,0x98) Ary1LdI4
Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66107760, modOpcodes line 657.
Ary1LdI4
(2,0x97)not emitteddup of (0,9E)handler #155Arrayconfirmed_handlerAry1LdI4.Alias dispatch slot (2, 0x97) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 97 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,92) Ary1LdI4, (2,93) Ary1LdI4, (2,98) Ary1LdI4.
(0,0x9E) Ary1LdI4, (2,0x92) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x98) Ary1LdI4
Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66107770, modOpcodes line 658.
Ary1LdI4
(2,0x98)not emitteddup of (0,9E)handler #155Arrayconfirmed_handlerAry1LdI4.Alias dispatch slot (2, 0x98) for the canonical Ary1LdI4 at (0, 0x9E); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 98 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EAC, shared by 5 dispatch slots (real opcode #155). This is a duplicate slot of (0,9E) Ary1LdI4. Other slots: (0,9E) Ary1LdI4, (2,92) Ary1LdI4, (2,93) Ary1LdI4, (2,97) Ary1LdI4.
(0,0x9E) Ary1LdI4, (2,0x92) Ary1LdI4, (2,0x93) Ary1LdI4, (2,0x97) Ary1LdI4
Description: draft, by claude-opus-4.7. Handler 0x66108EAC, dispatch slot 0x66107774, modOpcodes line 659.
Ary1LdPr
(0,0x41)emittedprimary of 2handler #64Arrayconfirmed_msdocs2 corpus hitsAry1LdPr.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r(3) As TRec
r(1).s = "x"
End Sub
Encoding, evidence and notes
Encoding: 41, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 41 Ary1LdPr
Form1.LoadPlugins @ 0x4644FC | 464793 41 Ary1LdPr
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C467 41 Ary1LdPr
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_41_Ary1LdPr.
Handler: 0x66108F17, shared by 2 dispatch slots (real opcode #64). This is the primary slot. Other slots: (2,9B) Ary1LdPr.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66108F17, dispatch slot 0x66106E18, modOpcodes line 649.
Ary1LdPr
(2,0x9B)not emitteddup of (0,41)handler #64Arrayconfirmed_handlerAry1LdPr.Alias dispatch slot (2, 0x9B) for the canonical Ary1LdPr at (0, 0x41); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 9B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F17, shared by 2 dispatch slots (real opcode #64). This is a duplicate slot of (0,41) Ary1LdPr. Other slots: (0,41) Ary1LdPr.
Description: draft, by claude-opus-4.7. Handler 0x66108F17, dispatch slot 0x66107780, modOpcodes line 674.
Ary1LdR8
(2,0x94)not emitteddup of (0,9F)handler #156Arrayconfirmed_msdocsAry1LdR8.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 94 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EC0, shared by 3 dispatch slots (real opcode #156). This is a duplicate slot of (0,9F) Ary1LdCy. Other slots: (0,9F) Ary1LdCy, (2,95) Ary1LdR8.
(0,0x9F) Ary1LdCy, (2,0x95) Ary1LdR8
Description: draft, by claude-opus-4.7. Handler 0x66108EC0, dispatch slot 0x66107764, modOpcodes line 662.
Ary1LdR8
(2,0x95)not emitteddup of (0,9F)handler #156Arrayconfirmed_handlerAry1LdR8.Alias dispatch slot (2, 0x95) for the canonical Ary1LdR8 at (2, 0x94); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 95 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108EC0, shared by 3 dispatch slots (real opcode #156). This is a duplicate slot of (0,9F) Ary1LdCy. Other slots: (0,9F) Ary1LdCy, (2,94) Ary1LdR8.
(0,0x9F) Ary1LdCy, (2,0x94) Ary1LdR8
Description: draft, by claude-opus-4.7. Handler 0x66108EC0, dispatch slot 0x66107768, modOpcodes line 663.
Ary1LdRf
(0,0x40)emittedprimary of 2handler #63Arrayconfirmed_msdocs43 corpus hitsAry1LdRf.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Dim gf(3) As Boolean
Public Sub Main()
P gf(1)
End Sub
Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding: 40, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 40 Ary1LdRf
Form1.LoadPlugins @ 0x4644FC | 464650 40 Ary1LdRf
Form1.Form_Load @ 0x479DC0 | 47B2D0 40 Ary1LdRf
Form1.Form_Load @ 0x479DC0 | 47B335 40 Ary1LdRf
43 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_40_Ary1LdRf.
Handler: 0x66105004, shared by 2 dispatch slots (real opcode #63). This is the primary slot. Other slots: (2,9C) Ary1LdRf.
Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105004, dispatch slot 0x66106E14, modOpcodes line 648.
Ary1LdRf
(2,0x9C)not emitteddup of (0,40)handler #63Arrayconfirmed_handlerAry1LdRf.Alias dispatch slot (2, 0x9C) for the canonical Ary1LdRf at (0, 0x40); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 9C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105004, shared by 2 dispatch slots (real opcode #63). This is a duplicate slot of (0,40) Ary1LdRf. Other slots: (0,40) Ary1LdRf.
Description: draft, by claude-opus-4.7. Handler 0x66105004, dispatch slot 0x66107784, modOpcodes line 675.
Ary1LdRfVar
(2,0x96)emittedhandler #432Arrayconfirmed_msdocs4 corpus hitsAry1LdRfVar.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Variant, b As Variant, i As Long
b = a(i)
End Sub
Encoding, evidence and notes
Encoding: FC 96 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC96 Ary1LdRfVar
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D007 FC96 Ary1LdRfVar
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D152 FC96 Ary1LdRfVar
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D23F FC96 Ary1LdRfVar
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_96_Ary1LdRfVar.
Handler: 0x66108F00, unique to this slot (real opcode #432).
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66108F00, dispatch slot 0x6610776C, modOpcodes line 671.
Ary1LdRfVarg
(2,0xB2)emittedhandler #443Arrayinferred_corpus5 corpus hitsAry1LdRfVarg.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
End Sub
Sub PA(ParamArray p() As Variant)
Dim o As Object
Set o = p(0)
Set p(0) = o
End Sub
Encoding, evidence and notes
Encoding: FC B2 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCB2 68FF Ary1LdRfVarg var_98
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF27 FCB2 38FF Ary1LdRfVarg var_C8
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF4B FCB2 48FF Ary1LdRfVarg var_B8
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF5E FCB2 38FF Ary1LdRfVarg var_C8
5 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B2_Ary1LdRfVarg.
Handler: 0x6610B1E4, unique to this slot (real opcode #443).
Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B1E4, dispatch slot 0x661077DC, modOpcodes line 643.
Ary1LdRfVargParam
(2,0xB4)emittedhandler #445Arrayconfirmed_msdocsAry1LdRfVargParam.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
End Sub
Sub PA(ParamArray p() As Variant)
PB p(0)
Set p(1) = Nothing
p(1) = 1
End Sub
Sub PB(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FC B4 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB4 Ary1LdRfVargParam
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B4_Ary1LdRfVargParam.
Handler: 0x6610B205, unique to this slot (real opcode #445).
Description: draft, by claude-opus-4.7. Handler 0x6610B205, dispatch slot 0x661077E4, modOpcodes line 705.
Ary1LdUI1
(2,0x90)emittedhandler #431Arrayconfirmed_msdocs94 corpus hitsAry1LdUI1.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Byte, b As Byte, i As Long
b = a(i)
End Sub
Encoding, evidence and notes
Encoding: FC 90 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC90 Ary1LdUI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA95 FC90 Ary1LdUI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAAA FC90 Ary1LdUI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAC0 FC90 Ary1LdUI1
94 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_90_Ary1LdUI1.
Handler: 0x66108E7F, unique to this slot (real opcode #431).
Corpus: 94 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66108E7F, dispatch slot 0x66107754, modOpcodes line 670.
Ary1LdVar
(2,0x9D)not emittedhandler #433Arrayconfirmed_msdocsAry1LdVar.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC 9D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B17C, unique to this slot (real opcode #433).
Description: draft, by claude-opus-4.7. Handler 0x6610B17C, dispatch slot 0x66107788, modOpcodes line 676.
Ary1LdVarg
(2,0xB3)not emittedhandler #444Arrayconfirmed_msdocsAry1LdVarg.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC B3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B18B, unique to this slot (real opcode #444).
Description: draft, by claude-opus-4.7. Handler 0x6610B18B, dispatch slot 0x661077E0, modOpcodes line 703.
Ary1StAd
(2,0xA8)emittedhandler #436Arrayconfirmed_msdocs2 corpus hitsAry1StAd.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Object, b As Object, i As Long
Set a(i) = New Collection
End Sub
Encoding, evidence and notes
Encoding: FC A8 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCA8 Ary1StAd
Form1.LoadPlugins @ 0x4644FC | 46468F FCA8 Ary1StAd
Form1.LoadPlugins @ 0x4644FC | 46477A FCA8 Ary1StAd
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_A8_Ary1StAd.
Handler: 0x6610B3F1, unique to this slot (real opcode #436).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B3F1, dispatch slot 0x661077B4, modOpcodes line 684.
Ary1StAdFunc
(2,0xAF)not emittedhandler #441Arrayconfirmed_msdocsAry1StAdFunc.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC AF (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B3DB, unique to this slot (real opcode #441).
Description: draft, by claude-opus-4.7. Handler 0x6610B3DB, dispatch slot 0x661077D0, modOpcodes line 693.
Ary1StCy
(0,0xA4)emittedprimary of 3handler #161Arrayconfirmed_msdocsAry1StCy.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Currency, b As Currency, i As Long
a(i) = 1.5@
End Sub
Encoding, evidence and notes
Encoding: A4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A4 Ary1StCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A4_Ary1StCy.
Handler: 0x66108F71, shared by 3 dispatch slots (real opcode #161). This is the primary slot. Other slots: (2,A4) Ary1StCy, (2,A5) Ary1StCy.
(2,0xA4) Ary1StCy, (2,0xA5) Ary1StCy
Description: draft, by claude-opus-4.7. Handler 0x66108F71, dispatch slot 0x66106FA4, modOpcodes line 665.
Ary1StCy
(2,0xA4)not emitteddup of (0,A4)handler #161Arrayconfirmed_handlerAry1StCy.Alias dispatch slot (2, 0xA4) for the canonical Ary1StCy at (0, 0xA4); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A4 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F71, shared by 3 dispatch slots (real opcode #161). This is a duplicate slot of (0,A4) Ary1StCy. Other slots: (0,A4) Ary1StCy, (2,A5) Ary1StCy.
(0,0xA4) Ary1StCy, (2,0xA5) Ary1StCy
Description: draft, by claude-opus-4.7. Handler 0x66108F71, dispatch slot 0x661077A4, modOpcodes line 680.
Ary1StCy
(2,0xA5)not emitteddup of (0,A4)handler #161Arrayconfirmed_handlerAry1StCy.Alias dispatch slot (2, 0xA5) for the canonical Ary1StCy at (0, 0xA4); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A5 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F71, shared by 3 dispatch slots (real opcode #161). This is a duplicate slot of (0,A4) Ary1StCy. Other slots: (0,A4) Ary1StCy, (2,A4) Ary1StCy.
(0,0xA4) Ary1StCy, (2,0xA4) Ary1StCy
Description: draft, by claude-opus-4.7. Handler 0x66108F71, dispatch slot 0x661077A8, modOpcodes line 681.
Ary1StFPR4
(0,0xA5)emittedprimary of 2handler #162Arrayconfirmed_msdocsAry1StFPR4.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Single, b As Single, i As Long
a(i) = 1.5!
End Sub
Encoding, evidence and notes
Encoding: A5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A5 Ary1StFPR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A5_Ary1StFPR4.
Handler: 0x66108F89, shared by 2 dispatch slots (real opcode #162). This is the primary slot. Other slots: (2,A9) Ary1StFPR4.
Description: draft, by claude-opus-4.7. Handler 0x66108F89, dispatch slot 0x66106FA8, modOpcodes line 667.
Ary1StFPR4
(2,0xA9)not emitteddup of (0,A5)handler #162Arrayconfirmed_handlerAry1StFPR4.Alias dispatch slot (2, 0xA9) for the canonical Ary1StFPR4 at (0, 0xA5); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A9 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F89, shared by 2 dispatch slots (real opcode #162). This is a duplicate slot of (0,A5) Ary1StFPR4. Other slots: (0,A5) Ary1StFPR4.
Description: draft, by claude-opus-4.7. Handler 0x66108F89, dispatch slot 0x661077B8, modOpcodes line 685.
Ary1StFPR8
(0,0xA6)emittedprimary of 2handler #163Arrayconfirmed_msdocsAry1StFPR8.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Date, b As Date, i As Long
a(i) = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding: A6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A6 Ary1StFPR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A6_Ary1StFPR8.
Handler: 0x66108FA7, shared by 2 dispatch slots (real opcode #163). This is the primary slot. Other slots: (2,AA) Ary1StFPR8.
Description: draft, by claude-opus-4.7. Handler 0x66108FA7, dispatch slot 0x66106FAC, modOpcodes line 669.
Ary1StFPR8
(2,0xAA)not emitteddup of (0,A6)handler #163Arrayconfirmed_handlerAry1StFPR8.Alias dispatch slot (2, 0xAA) for the canonical Ary1StFPR8 at (0, 0xA6); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC AA (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108FA7, shared by 2 dispatch slots (real opcode #163). This is a duplicate slot of (0,A6) Ary1StFPR8. Other slots: (0,A6) Ary1StFPR8.
Description: draft, by claude-opus-4.7. Handler 0x66108FA7, dispatch slot 0x661077BC, modOpcodes line 686.
Ary1StI2
(0,0xA2)emittedprimary of 2handler #159Arrayconfirmed_msdocsAry1StI2.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Boolean, b As Boolean, i As Long
a(i) = True
End Sub
Encoding, evidence and notes
Encoding: A2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A2 Ary1StI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A2_Ary1StI2.
Handler: 0x66108F47, shared by 2 dispatch slots (real opcode #159). This is the primary slot. Other slots: (2,A1) Ary1StI2.
Description: draft, by claude-opus-4.7. Handler 0x66108F47, dispatch slot 0x66106F9C, modOpcodes line 653.
Ary1StI2
(2,0xA1)not emitteddup of (0,A2)handler #159Arrayconfirmed_handlerAry1StI2.Alias dispatch slot (2, 0xA1) for the canonical Ary1StI2 at (0, 0xA2); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F47, shared by 2 dispatch slots (real opcode #159). This is a duplicate slot of (0,A2) Ary1StI2. Other slots: (0,A2) Ary1StI2.
Description: draft, by claude-opus-4.7. Handler 0x66108F47, dispatch slot 0x66107798, modOpcodes line 654.
Ary1StI4
(0,0xA3)emittedprimary of 3handler #160Arrayconfirmed_msdocs9 corpus hitsAry1StI4.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Long, b As Long, i As Long
a(i) = 70000
End Sub
Encoding, evidence and notes
Encoding: A3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A3 Ary1StI4
modCrc.Proc_446CFC @ 0x446CFC | 446DA1 A3 Ary1StI4
modActionScript.Proc_45A518 @ 0x45A518 | 45A560 A3 Ary1StI4
modActionScript.Proc_45A518 @ 0x45A518 | 45A584 A3 Ary1StI4
9 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A3_Ary1StI4.
Handler: 0x66108F5D, shared by 3 dispatch slots (real opcode #160). This is the primary slot. Other slots: (2,A2) Ary1StR4, (2,A3) Ary1StR4.
Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.
(2,0xA2) Ary1StR4, (2,0xA3) Ary1StR4
Description: draft, by claude-opus-4.7. Handler 0x66108F5D, dispatch slot 0x66106FA0, modOpcodes line 660.
Ary1StR4
(2,0xA2)not emitteddup of (0,A3)handler #160Arrayconfirmed_msdocsAry1StR4.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A2 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F5D, shared by 3 dispatch slots (real opcode #160). This is a duplicate slot of (0,A3) Ary1StI4. Other slots: (0,A3) Ary1StI4, (2,A3) Ary1StR4.
(0,0xA3) Ary1StI4, (2,0xA3) Ary1StR4
Description: draft, by claude-opus-4.7. Handler 0x66108F5D, dispatch slot 0x6610779C, modOpcodes line 678.
Ary1StR4
(2,0xA3)not emitteddup of (0,A3)handler #160Arrayconfirmed_handlerAry1StR4.Alias dispatch slot (2, 0xA3) for the canonical Ary1StR4 at (2, 0xA2); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108F5D, shared by 3 dispatch slots (real opcode #160). This is a duplicate slot of (0,A3) Ary1StI4. Other slots: (0,A3) Ary1StI4, (2,A2) Ary1StR4.
(0,0xA3) Ary1StI4, (2,0xA2) Ary1StR4
Description: draft, by claude-opus-4.7. Handler 0x66108F5D, dispatch slot 0x661077A0, modOpcodes line 679.
Ary1StStr
(2,0xA7)not emittedhandler #435Arrayconfirmed_msdocsAry1StStr.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A7 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B305, unique to this slot (real opcode #435).
Description: draft, by claude-opus-4.7. Handler 0x6610B305, dispatch slot 0x661077B0, modOpcodes line 683.
Ary1StStrCopy
(0,0x3B)emittedprimary of 2handler #58Arrayconfirmed_msdocs19 corpus hitsAry1StStrCopy.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As String, b As String, i As Long
a(i) = "abc"
End Sub
Encoding, evidence and notes
Encoding: 3B, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 3B Ary1StStrCopy
clsCmnDlg.SetCustomFilter @ 0x451414 | 45147B 3B Ary1StStrCopy
clsCmnDlg.SetCustomFilter @ 0x451414 | 4514C9 3B Ary1StStrCopy
clsCmnDlg.SetCustomFilter @ 0x451414 | 451508 3B Ary1StStrCopy
19 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3B_Ary1StStrCopy.
Handler: 0x6610B317, shared by 2 dispatch slots (real opcode #58). This is the primary slot. Other slots: (2,B1) Ary1StStrCopy.
Corpus: 19 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B317, dispatch slot 0x66106E00, modOpcodes line 699.
Ary1StStrCopy
(2,0xB1)not emitteddup of (0,3B)handler #58Arrayconfirmed_handlerAry1StStrCopy.Alias dispatch slot (2, 0xB1) for the canonical Ary1StStrCopy at (0, 0x3B); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC B1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B317, shared by 2 dispatch slots (real opcode #58). This is a duplicate slot of (0,3B) Ary1StStrCopy. Other slots: (0,3B) Ary1StStrCopy.
Description: draft, by claude-opus-4.7. Handler 0x6610B317, dispatch slot 0x661077D8, modOpcodes line 701.
Ary1StUI1
(2,0xA0)emittedhandler #434Arrayconfirmed_msdocs55 corpus hitsAry1StUI1.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Byte, b As Byte, i As Long
a(i) = 7
End Sub
Encoding, evidence and notes
Encoding: FC A0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCA0 Ary1StUI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBAC FCA0 Ary1StUI1
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F008 FCA0 Ary1StUI1
Form2.Shellcode2Exe @ 0x470410 | 4705F5 FCA0 Ary1StUI1
55 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_A0_Ary1StUI1.
Handler: 0x66108F32, unique to this slot (real opcode #434).
Corpus: 55 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66108F32, dispatch slot 0x66107794, modOpcodes line 677.
Ary1StVar
(0,0x52)emittedprimary of 2handler #80Arrayconfirmed_msdocsAry1StVar.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(5) As Variant, b As Variant, i As Long
a(i) = 5
End Sub
Encoding, evidence and notes
Encoding: 52, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 52 Ary1StVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_52_Ary1StVar.
Handler: 0x66106563, shared by 2 dispatch slots (real opcode #80). This is the primary slot. Other slots: (2,A6) Ary1StVar.
Description: draft, by claude-opus-4.7. Handler 0x66106563, dispatch slot 0x66106E5C, modOpcodes line 650.
Ary1StVar
(2,0xA6)not emitteddup of (0,52)handler #80Arrayconfirmed_handlerAry1StVar.Alias dispatch slot (2, 0xA6) for the canonical Ary1StVar at (0, 0x52); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC A6 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106563, shared by 2 dispatch slots (real opcode #80). This is a duplicate slot of (0,52) Ary1StVar. Other slots: (0,52) Ary1StVar.
Description: draft, by claude-opus-4.7. Handler 0x66106563, dispatch slot 0x661077AC, modOpcodes line 682.
Ary1StVarAd
(2,0xAB)emittedhandler #437Arrayconfirmed_msdocsAry1StVarAd.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a(3) As Object, u(3) As IUnknown, v(3) As Variant, c(3) As Collection, o As Object, i As Long
Set v(i) = F()
End Sub
Function F() As Object
End Function
Function G() As Collection
End Function
Encoding, evidence and notes
Encoding: FC AB (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCAB Ary1StVarAd
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_AB_Ary1StVarAd.
Handler: 0x66106457, unique to this slot (real opcode #437).
Description: draft, by claude-opus-4.7. Handler 0x66106457, dispatch slot 0x661077C0, modOpcodes line 688.
Ary1StVarAdFunc
(2,0xAC)not emittedhandler #438Arrayconfirmed_msdocsAry1StVarAdFunc.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC AC (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B4CF, unique to this slot (real opcode #438).
Description: draft, by claude-opus-4.7. Handler 0x6610B4CF, dispatch slot 0x661077C4, modOpcodes line 694.
Ary1StVarCopy
(2,0xB0)emittedhandler #442Arrayconfirmed_msdocs283 corpus hitsAry1StVarCopy.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
ReDim a(5)
End Sub
Sub P(x() As Variant)
Dim b As Variant
x(1) = b
b = x(2)
End Sub
Encoding, evidence and notes
Encoding: FC B0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB0 Ary1StVarCopy
Form1.Form_Load @ 0x479DC0 | 47A073 FCB0 Ary1StVarCopy
Form1.Form_Load @ 0x479DC0 | 47A082 FCB0 Ary1StVarCopy
Form1.Form_Load @ 0x479DC0 | 47A091 FCB0 Ary1StVarCopy
283 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B0_Ary1StVarCopy.
Handler: 0x6610B6C6, unique to this slot (real opcode #442).
Corpus: 283 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B6C6, dispatch slot 0x661077D4, modOpcodes line 700.
Ary1StVarUnk
(2,0xAD)emittedhandler #439Arrayconfirmed_msdocsAry1StVarUnk.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim v(3) As Variant, i As Long, u As IUnknown, o(3) As Object
Set v(i) = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding: FC AD (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCAD Ary1StVarUnk
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_AD_Ary1StVarUnk.
Handler: 0x6610B566, unique to this slot (real opcode #439).
Description: draft, by claude-opus-4.7. Handler 0x6610B566, dispatch slot 0x661077C8, modOpcodes line 691.
Ary1StVarUnkFunc
(2,0xAE)not emittedhandler #440Arrayconfirmed_msdocsAry1StVarUnkFunc.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC AE (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B54A, unique to this slot (real opcode #440).
Description: draft, by claude-opus-4.7. Handler 0x6610B54A, dispatch slot 0x661077CC, modOpcodes line 696.
Ary1StVarg
(2,0xB5)emittedhandler #446Arrayconfirmed_msdocsAry1StVarg.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
End Sub
Sub PA(ParamArray p() As Variant)
PB p(0)
Set p(1) = Nothing
p(1) = 1
End Sub
Sub PB(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FC B5 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB5 Ary1StVarg
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B5_Ary1StVarg.
Handler: 0x6610B777, unique to this slot (real opcode #446).
Description: draft, by claude-opus-4.7. Handler 0x6610B777, dispatch slot 0x661077E8, modOpcodes line 704.
Ary1StVargAd
(2,0xB7)emittedhandler #448Arrayconfirmed_msdocsAry1StVargAd.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
End Sub
Sub PA(ParamArray p() As Variant)
Dim o As Object
Set o = p(0)
Set p(0) = o
End Sub
Encoding, evidence and notes
Encoding: FC B7 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB7 Ary1StVargAd
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B7_Ary1StVargAd.
Handler: 0x6610B4F1, unique to this slot (real opcode #448).
Description: draft, by claude-opus-4.7. Handler 0x6610B4F1, dispatch slot 0x661077F0, modOpcodes line 689.
Ary1StVargAdFunc
(2,0xB8)not emittedhandler #449Arrayconfirmed_msdocsAry1StVargAdFunc.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC B8 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B4D9, unique to this slot (real opcode #449).
Description: draft, by claude-opus-4.7. Handler 0x6610B4D9, dispatch slot 0x661077F4, modOpcodes line 695.
Ary1StVargCopy
(2,0xB6)emittedhandler #447Arrayconfirmed_msdocsAry1StVargCopy.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a As Boolean
End Sub
Sub PA(ParamArray p() As Variant)
Dim i As Long, v As Variant
i = 1
v = p(i)
p(i) = v
For Each v In p
Next
i = UBound(p)
End Sub
Encoding, evidence and notes
Encoding: FC B6 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB6 Ary1StVargCopy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B6_Ary1StVargCopy.
Handler: 0x6610B755, unique to this slot (real opcode #447).
Description: draft, by claude-opus-4.7. Handler 0x6610B755, dispatch slot 0x661077EC, modOpcodes line 706.
Ary1StVargUnk
(2,0xB9)emittedhandler #450Arrayconfirmed_msdocsAry1StVargUnk.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub PA(ParamArray p() As Variant)
Dim u As IUnknown, o As Object, i As Long
i = 0
Set p(i) = FU()
Set p(i) = u
Set p(i) = FO()
Set p(i) = o
p(i) = 5
Dim w As Variant
w = p(i)
P2 p(i)
End Sub
Sub P2(ByVal x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FC B9 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCB9 Ary1StVargUnk
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_B9_Ary1StVargUnk.
Handler: 0x6610B5F5, unique to this slot (real opcode #450).
Description: draft, by claude-opus-4.7. Handler 0x6610B5F5, dispatch slot 0x661077F8, modOpcodes line 692.
Ary1StVargUnkFunc
(2,0xBA)not emittedhandler #451Arrayconfirmed_msdocsAry1StVargUnkFunc.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC BA (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B5E0, unique to this slot (real opcode #451).
Description: draft, by claude-opus-4.7. Handler 0x6610B5E0, dispatch slot 0x661077FC, modOpcodes line 697.
AryDescTemp
(0,0x26)emittedprimary of 2handler #37Arrayinferred_corpus1 corpus hitsAryDescTemp.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Private Type TR
a(3) As Boolean
End Type
Public Sub Main()
Dim r As TR, n As Long
P r.a
End Sub
Private Sub P(x() As Boolean)
End Sub
Encoding, evidence and notes
Encoding: 26, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 26 58FF AryDescTemp var_A8
lzma.Proc_46E084 @ 0x46E084 | 46E220 26 B0FE AryDescTemp var_150
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_26_AryDescTemp.
Handler: 0x6610903E, shared by 2 dispatch slots (real opcode #37). This is the primary slot. Other slots: (3,0F) AryDescTemp.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610903E, dispatch slot 0x66106DAC, modOpcodes line 645.
AryDescTemp
(3,0x0F)not emitteddup of (0,26)handler #37Arrayconfirmed_handlerAryDescTemp.Encoding, evidence and notes
Encoding: FD 0F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610903E, shared by 2 dispatch slots (real opcode #37). This is a duplicate slot of (0,26) AryDescTemp. Other slots: (0,26) AryDescTemp.
Description: none. Handler 0x6610903E, dispatch slot 0x66107950, modOpcodes line 646.
AryInRecLdPr
(5,0x06)emittedhandler #732UDT / recordinferred_corpus3 corpus hitsAryInRecLdPr.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Private Type TRec
pad As Long
f(3) As Boolean
End Type
Public Sub Main()
Dim r As TRec, b As Boolean, i As Long
b = r.f(i)
End Sub
Encoding, evidence and notes
Encoding: FF 06 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: udtPool:%2 dims:%2
Operands:
%2(udtPool): immediate_word, 2 byte(s). 16-bit immediate.%2(dims): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF06 00000100 AryInRecLdPr udtPool:0x0 dims:0x1
lzma.Proc_46E084 @ 0x46E084 | 46E18A FF06 13000100 AryInRecLdPr udtPool:0x13 dims:0x1
lzma.Proc_46E084 @ 0x46E084 | 46E23B FF06 1B000100 AryInRecLdPr udtPool:0x1B dims:0x1
lzma.Proc_46E084 @ 0x46E084 | 46E24D FF06 1B000100 AryInRecLdPr udtPool:0x1B dims:0x1
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_06_AryInRecLdPr.
Handler: 0x66109020, unique to this slot (real opcode #732).
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109020, dispatch slot 0x6610812C, modOpcodes line 641.
AryInRecLdRf
(5,0x07)not emittedhandler #733UDT / recordinferred_corpus1 corpus hitsAryInRecLdRf.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FF 07 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: udtPool:%2 dims:%2
Operands:
%2(udtPool): immediate_word, 2 byte(s). 16-bit immediate.%2(dims): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF07 13000100 AryInRecLdRf udtPool:0x13 dims:0x1
lzma.Proc_46E084 @ 0x46E084 | 46E4E2 FF07 13000100 AryInRecLdRf udtPool:0x13 dims:0x1
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108FF1, unique to this slot (real opcode #733).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66108FF1, dispatch slot 0x66108130, modOpcodes line 642.
AryLdPr
(0,0xA7)emittedprimary of 2handler #164Arrayinferred_corpuspr.Pops the array reference and dim index values, bounds-checks them and computes the element address. The address goes into the interpreter's cached object register pr, and the element is then read or written with a Mem* opcode at offset 0 (observed AryLdPr dim:0x3 followed by MemLdStr [pr+0x0] for a Long element).
Stack: [..., i1, i2, ..., iN, ary:Rf] -> [...] (pr = element address)
Operand %2: number of dimensions.
Emitted for element access on arrays with 3 or more dimensions. 1-D arrays use Ary1* opcodes and 2-D/indexed loads use the AryLdRf/Ary* forms.
Public Sub Main()
Dim a(3, 3, 3) As Long, n As Long, i As Long
n = a(1, i, 2)
End Sub
Encoding, evidence and notes
Encoding: A7, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: dim:%2
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Observed: A7 0300 AryLdPr dim:0x3
A7 0300 AryLdPr dim:0x3
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A7_AryLdPr.
Handler: 0x66108FC5, shared by 2 dispatch slots (real opcode #164). This is the primary slot. Other slots: (2,8D) AryLdPr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a(3, 3, 3) As Long, n As Long, i As Long
n = a(1, i, 2)
End SubDescription: draft, by claude-opus-5-5. Handler 0x66108FC5, dispatch slot 0x66106FB0, modOpcodes line 637.
AryLdPr
(2,0x8D)not emitteddup of (0,A7)handler #164Arrayconfirmed_handlerpr.Encoding, evidence and notes
Encoding: FC 8D (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim %2
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108FC5, shared by 2 dispatch slots (real opcode #164). This is a duplicate slot of (0,A7) AryLdPr. Other slots: (0,A7) AryLdPr.
Description: none. Handler 0x66108FC5, dispatch slot 0x66107748, modOpcodes line 638.
AryLdRf
(0,0xA8)not emittedprimary of 2handler #165Arrayinferred_corpusEncoding, evidence and notes
Encoding: A8, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: dim %2
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108FDC, shared by 2 dispatch slots (real opcode #165). This is the primary slot. Other slots: (2,8E) AryLdRf.
Description: none. Handler 0x66108FDC, dispatch slot 0x66106FB4, modOpcodes line 639.
AryLdRf
(2,0x8E)not emitteddup of (0,A8)handler #165Arrayconfirmed_handlerEncoding, evidence and notes
Encoding: FC 8E (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim %2
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108FDC, shared by 2 dispatch slots (real opcode #165). This is a duplicate slot of (0,A8) AryLdRf. Other slots: (0,A8) AryLdRf.
Description: none. Handler 0x66108FDC, dispatch slot 0x6610774C, modOpcodes line 640.
AryLock
(0,0x2E)emittedprimary of 2handler #45Arrayinferred_corpus43 corpus hitsAryLock.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a() As Boolean
P a(2)
End Sub
Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding: 2E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 2E 74FF AryLock var_8C
Form1.LoadPlugins @ 0x4644FC | 46464D 2E 98FE AryLock var_168
Form1.Form_Load @ 0x479DC0 | 47B2CD 2E A4FD AryLock var_25C
Form1.Form_Load @ 0x479DC0 | 47B332 2E A4FD AryLock var_25C
43 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2E_AryLock.
Handler: 0x66105092, shared by 2 dispatch slots (real opcode #45). This is the primary slot. Other slots: (3,0D) AryLock.
Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105092, dispatch slot 0x66106DCC, modOpcodes line 625.
AryLock
(3,0x0D)not emitteddup of (0,2E)handler #45Arrayconfirmed_handlerAryLock.Encoding, evidence and notes
Encoding: FD 0D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105092, shared by 2 dispatch slots (real opcode #45). This is a duplicate slot of (0,2E) AryLock. Other slots: (0,2E) AryLock.
Description: none. Handler 0x66105092, dispatch slot 0x66107948, modOpcodes line 626.
AryUnlock
(0,0x2D)emittedprimary of 2handler #44Arrayinferred_corpus54 corpus hitsAryUnlock.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a() As Boolean
P a(2)
End Sub
Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding: 2D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 2D 74FF AryUnlock var_8C
Form1.LoadPlugins @ 0x4644FC | 46465E 2D 98FE AryUnlock var_168
Form1.Form_Load @ 0x479DC0 | 47A4A8 2D A4FD AryUnlock var_25C
Form1.Form_Load @ 0x479DC0 | 47B2DE 2D A4FD AryUnlock var_25C
54 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2D_AryUnlock.
Handler: 0x661050C0, shared by 2 dispatch slots (real opcode #44). This is the primary slot. Other slots: (3,0E) AryUnlock.
Corpus: 54 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661050C0, dispatch slot 0x66106DC8, modOpcodes line 623.
AryUnlock
(3,0x0E)not emitteddup of (0,2D)handler #44Arrayconfirmed_handlerAryUnlock.Encoding, evidence and notes
Encoding: FD 0E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661050C0, shared by 2 dispatch slots (real opcode #44). This is a duplicate slot of (0,2D) AryUnlock. Other slots: (0,2D) AryUnlock.
Description: none. Handler 0x661050C0, dispatch slot 0x6610794C, modOpcodes line 624.
EraseDestrKeepData
(5,0x31)not emittedhandler #758UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FF 31 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610912A, unique to this slot (real opcode #758).
Description: none. Handler 0x6610912A, dispatch slot 0x661081D8, modOpcodes line 436.
FnLBound
(0,0x4C)emittedprimary of 2handler #75Arrayconfirmed_msdocs2 corpus hitsFnLBound.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a() As Long, n As Long
n = LBound(a, 1)
End Sub
Encoding, evidence and notes
Encoding: 4C, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 4C FnLBound
CDisassembler.DisasmBlock @ 0x44F108 | 44F112 4C FnLBound
b64.Proc_478E48 @ 0x478E48 | 479C33 4C FnLBound
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4C_FnLBound.
Handler: 0x6610505A, shared by 2 dispatch slots (real opcode #75). This is the primary slot. Other slots: (2,CA) FnLBound.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610505A, dispatch slot 0x66106E44, modOpcodes line 633.
FnLBound
(2,0xCA)not emitteddup of (0,4C)handler #75Arrayconfirmed_handlerFnLBound.Alias dispatch slot (2, 0xCA) for the canonical FnLBound at (0, 0x4C); semantics are identical.
Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Encoding, evidence and notes
Encoding: FC CA (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610505A, shared by 2 dispatch slots (real opcode #75). This is a duplicate slot of (0,4C) FnLBound. Other slots: (0,4C) FnLBound.
Description: draft, by claude-opus-4.7. Handler 0x6610505A, dispatch slot 0x6610783C, modOpcodes line 634.
FnUBound
(2,0xCB)emittedhandler #460Arrayconfirmed_msdocs159 corpus hitsFnUBound.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Private Type TR
a(3) As Boolean
End Type
Public Sub Main()
Dim r As TR, n As Long
n = UBound(r.a)
End Sub
Private Sub P(x() As Boolean)
End Sub
Encoding, evidence and notes
Encoding: FC CB (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCCB FnUBound
Form1.LoadPlugins @ 0x4644FC | 464620 FCCB FnUBound
Form1.RegisterPlugin @ 0x44CB20 | 44CBBF FCCB FnUBound
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EEDB FCCB FnUBound
159 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_CB_FnUBound.
Handler: 0x6610506C, unique to this slot (real opcode #460).
Corpus: 159 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610506C, dispatch slot 0x66107840, modOpcodes line 635.
ParmAry1St
(2,0x8F)emittedhandler #430Arrayinferred_corpus12 corpus hitsParmAry1St.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
PA New Collection
End Sub
Sub PA(ParamArray p() As Variant)
Dim o As Object
Set o = p(0)
Set p(0) = o
End Sub
Encoding, evidence and notes
Encoding: FC 8F (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a index:%2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(index): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FC8F 78FF0000 ParmAry1St var_88 index:0x0
fso.Proc_461D10 @ 0x461D10 | 461F78 FC8F DCFE0000 ParmAry1St var_124 index:0x0
CFunc.ParseAsGlobal @ 0x468430 | 468573 FC8F 90FE0000 ParmAry1St var_170 index:0x0
CFunc.ParseAsGlobal @ 0x468430 | 468581 FC8F 90FE0100 ParmAry1St var_170 index:0x1
12 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_8F_ParmAry1St.
Handler: 0x66105126, unique to this slot (real opcode #430).
Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105126, dispatch slot 0x66107750, modOpcodes line 622.
StAryCopy
(5,0x02)emittedhandler #729Arrayconfirmed_msdocs35 corpus hitsStAryCopy.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a() As Boolean, b() As Boolean
b = a
End Sub
Encoding, evidence and notes
Encoding: FF 02 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF02 StAryCopy
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C433 FF02 StAryCopy
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EDAA FF02 StAryCopy
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D022 FF02 StAryCopy
35 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_02_StAryCopy.
Handler: 0x661090BC, unique to this slot (real opcode #729).
Corpus: 35 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661090BC, dispatch slot 0x6610811C, modOpcodes line 712.
StAryMove
(5,0x01)emittedhandler #728Arrayconfirmed_msdocs66 corpus hitsStAryMove.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a() As Boolean
End Sub
Function F() As Boolean()
Dim x() As Boolean
ReDim x(3)
F = x
End Function
Encoding, evidence and notes
Encoding: FF 01 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF01 StAryMove
Form1.LoadPlugins @ 0x4644FC | 4645CE FF01 StAryMove
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461542 FF01 StAryMove
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461582 FF01 StAryMove
66 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_01_StAryMove.
Handler: 0x66105049, unique to this slot (real opcode #728).
Corpus: 66 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105049, dispatch slot 0x66108118, modOpcodes line 711.
StAryRecCopy
(5,0x04)emittedhandler #731UDT / recordinferred_corpusPops source and destination array references and replaces the destination with a copy of the source, copying reference-counted members with the UDT descriptor.
Operand: 16-bit UDT-descriptor index.
Emitted for q = r with r(), q() both dynamic arrays of a UDT containing reference members.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r() As TRec, q() As TRec
q = r
End Sub
Encoding, evidence and notes
Encoding: FF 04 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF04 0000 StAryRecCopy
FF04 0000 StAryRecCopy
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_04_StAryRecCopy.
Handler: 0x661090CD, unique to this slot (real opcode #731).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r() As TRec, q() As TRec
q = r
End SubDescription: draft, by claude-opus-5-5. Handler 0x661090CD, dispatch slot 0x66108124, modOpcodes line 708.
StAryRecMove
(5,0x03)emittedhandler #730UDT / recordinferred_corpusLike StAryRecCopy, but the source is a temporary (function return) whose descriptor is moved rather than copied.
Operand: 16-bit UDT-descriptor index (observed 1).
Emitted for a = F() where F returns an array of a UDT.
Private Type TR
s As String
End Type
Public Sub Main()
Dim a() As TR, b() As TR
a = F()
End Sub
Private Function F() As TR()
End Function
Encoding, evidence and notes
Encoding: FF 03 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF03 0100 StAryRecMove
FF03 0100 StAryRecMove
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_03_StAryRecMove.
Handler: 0x661090EB, unique to this slot (real opcode #730).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TR
s As String
End Type
Public Sub Main()
Dim a() As TR, b() As TR
a = F()
End Sub
Private Function F() As TR()
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x661090EB, dispatch slot 0x66108120, modOpcodes line 710.
StAryVar
(5,0x36)emittedhandler #763Arrayinferred_corpus23 corpus hitsStAryVar.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim a() As String, s As String
a = Split("a,b", ",")
End Sub
Encoding, evidence and notes
Encoding: FF 36 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %r
Operands:
%r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
Observed: FF36 0820 StAryVar 0x2008 (Bstr | ARRAY)
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C429 FF36 0820 StAryVar 0x2008 (Bstr | ARRAY)
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D018 FF36 0820 StAryVar 0x2008 (Bstr | ARRAY)
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D163 FF36 0820 StAryVar 0x2008 (Bstr | ARRAY)
23 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_36_StAryVar.
Handler: 0x661098F4, unique to this slot (real opcode #763).
Corpus: 23 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661098F4, dispatch slot 0x661081EC, modOpcodes line 709.
VarIndexLdRfVar
(4,0xAF)emittedhandler #677Arrayinferred_corpusPops the index Variant(s) and the Variant containing the array, and pushes the address of the selected element (a Variant). Observed before a late call on the element: v(1).Add 5 gives VarIndexLdRfVar, LdPrVar, LateMemCall.
Operands: frame slot %a (temporary) and a 16-bit dimension count.
Emitted when an element of a Variant-held array is used as an object or passed by reference.
Public Sub Main()
Dim v As Variant, o As Object
v(1).Add 5
End Sub
Encoding, evidence and notes
Encoding: FE AF (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEAF 08FF0100 VarIndexLdRfVar
FEAF 08FF0100 VarIndexLdRfVar
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AF_VarIndexLdRfVar.
Handler: 0x6610907D, unique to this slot (real opcode #677).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, o As Object
v(1).Add 5
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610907D, dispatch slot 0x66107FD0, modOpcodes line 433.
VarIndexLdRfVarLock
(4,0xF2)emittedhandler #716Arrayinferred_corpus11 corpus hitsVarIndexLdRfVarLock.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim v As Variant
P v(1)
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FE F2 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %a %2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: FEF2 3CFF38FF0100 VarIndexLdRfVarLock var_C4 var_C8 0x1
Form1.Form_Load @ 0x479DC0 | 47A498 FEF2 40FFA4FD0100 VarIndexLdRfVarLock var_C0 var_25C 0x1
frmRefactor.Command4_Click @ 0x46AED8 | 46AFEE FEF2 24FFE0FE0100 VarIndexLdRfVarLock var_DC var_120 0x1
frmRefactor.Command4_Click @ 0x46AED8 | 46B036 FEF2 50FFE0FE0100 VarIndexLdRfVarLock var_B0 var_120 0x1
11 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F2_VarIndexLdRfVarLock.
Handler: 0x66109056, unique to this slot (real opcode #716).
Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109056, dispatch slot 0x661080DC, modOpcodes line 437.
VarIndexLdVar
(4,0xAE)emittedhandler #676Arrayinferred_corpus46 corpus hitsVarIndexLdVar.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long, o As Object
If v(1) Then n = 1
End Sub
Function F() As Variant
End Function
Encoding, evidence and notes
Encoding: FE AE (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a dim:%2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FEAE 24FF0100 VarIndexLdVar var_DC dim:0x1
Form1.Form_Load @ 0x479DC0 | 47A458 FEAE 40FF0100 VarIndexLdVar var_C0 dim:0x1
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE20 FEAE 28FF0100 VarIndexLdVar var_D8 dim:0x1
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE49 FEAE 28FF0100 VarIndexLdVar var_D8 dim:0x1
46 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AE_VarIndexLdVar.
Handler: 0x6610501D, unique to this slot (real opcode #676).
Corpus: 46 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610501D, dispatch slot 0x66107FCC, modOpcodes line 432.
VarIndexSt
(4,0xB0)emittedhandler #678Arrayinferred_corpus27 corpus hitsVarIndexSt.Operates on a VB6 SafeArray. See the printf template for the element-type and indexing form. AryLock/AryUnlock increment/decrement the array's lock count (required around direct element access). Ary1Ld*/Ary1St* load/store an element of a 1-D array; multi-dim variants exist in wider opcode tables. Erase releases an array's storage.
Emitted at array element access, Erase, and at the begin/end of arc through a SafeArray.
Public Sub Main()
ReDim a(3)
End Sub
Sub P(v As Variant)
v(1) = 3
End Sub
Encoding, evidence and notes
Encoding: FE B0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim:%2
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FEB0 0100 VarIndexSt dim:0x1
fso.Proc_45ECB4 @ 0x45ECB4 | 45EEB5 FEB0 0100 VarIndexSt dim:0x1
fso.Proc_443C70 @ 0x443C70 | 443CBC FEB0 0100 VarIndexSt dim:0x1
fso.Proc_443C70 @ 0x443C70 | 443CE4 FEB0 0100 VarIndexSt dim:0x1
27 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_B0_VarIndexSt.
Handler: 0x6610908A, unique to this slot (real opcode #678).
Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610908A, dispatch slot 0x66107FD4, modOpcodes line 434.
VarIndexStAd
(4,0xB1)emittedhandler #679Arrayinferred_corpusSet an element of a Variant-held array to an object.Pops the object (as a Variant), the index Variant(s) and the Variant array, and stores the object into the element.
Operand dim:%2: number of indices.
Emitted for Set v(i) = obj where v is a Variant containing an array.
Public Sub Main()
Dim v As Variant, b As Object
ReDim a(5) As Object
Set v(1) = New Collection
End Sub
Encoding, evidence and notes
Encoding: FE B1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: dim:%2
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FEB1 0100 VarIndexStAd dim:0x1
FEB1 0100 VarIndexStAd dim:0x1
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_B1_VarIndexStAd.
Handler: 0x661090B5, unique to this slot (real opcode #679).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, b As Object
ReDim a(5) As Object
Set v(1) = New Collection
End SubDescription: draft, by claude-opus-5-5. Handler 0x661090B5, dispatch slot 0x66107FD8, modOpcodes line 435.
Array_Erase
Erase array
Erase
(0,0x5A)emittedprimary of 2handler #88Arrayconfirmed_msdocs22 corpus hitsErase.Implements VB6 Erase. For fixed-size arrays, all elements are reset to the default for their type. For dynamic arrays, the SafeArray descriptor is freed and the variable is set to an uninitialized array of zero dimensions.
Emitted for every Erase statement.
Public Sub Main()
Dim a(5) As Boolean
Erase a
End Sub
Encoding, evidence and notes
Encoding: 5A, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 5A Erase
Form1.Form_Load @ 0x479DC0 | 47A182 5A Erase
Form1.Form_Load @ 0x479DC0 | 47A255 5A Erase
Form1.Form_Load @ 0x479DC0 | 47A3A0 5A Erase
22 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5A_Erase.
Handler: 0x6610507E, shared by 2 dispatch slots (real opcode #88). This is the primary slot. Other slots: (2,C3) Erase.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 22 occurrence(s) in PDFStreamDumper_p.exe.
Dim arr() As Long
ReDim arr(10)
Erase arrDescription: draft, by claude-opus-4.7. Handler 0x6610507E, dispatch slot 0x66106E7C, modOpcodes line 631.
Erase
(2,0xC3)not emitteddup of (0,5A)handler #88Arrayconfirmed_handlerErase.Alias dispatch slot (2, 0xC3) for the canonical Erase at (0, 0x5A); semantics are identical.
Implements VB6 Erase. For fixed-size arrays, all elements are reset to the default for their type. For dynamic arrays, the SafeArray descriptor is freed and the variable is set to an uninitialized array of zero dimensions.
Emitted for every Erase statement.
Dim arr() As Long
ReDim arr(10)
Erase arr
Encoding, evidence and notes
Encoding: FC C3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610507E, shared by 2 dispatch slots (real opcode #88). This is a duplicate slot of (0,5A) Erase. Other slots: (0,5A) Erase.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,5A) Erase (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610507E, dispatch slot 0x66107820, modOpcodes line 632.
Array_Redim
Redim / Redim Preserve
Redim
(4,0x8E)emittedhandler #648Arrayinferred_corpus47 corpus hitsRedim).Implements VB6 ReDim / ReDim Preserve. Operand stream carries the dimension count, VT element type code, element size, and a SafeArray flag mask. New bounds are popped from the stack (one I4 lower + I4 upper per dimension).
RedimPreserve copies existing elements that fall within the new bounds; pure Redim default-initializes all elements.
Emitted for every ReDim and ReDim Preserve.
Public Sub Main()
Dim a() As Boolean, b() As Boolean
ReDim a(5)
End Sub
Encoding, evidence and notes
Encoding: FE 8E (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
vbdec template: dim:%2 VT:%r elemSz:%2 SAFlag:%y
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.%r(VT): vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).%2(elemSz): immediate_word, 2 byte(s). 16-bit immediate.%y(SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.
Observed: FE8E 01000B0002008000 Redim dim:0x1 VT: 0xB (Bool) elemSz:0x2 SAFlag: 0x80 (HaveVarTyp)
Form1.LoadPlugins @ 0x4644FC | 46460A FE8E 01000C0004004004 Redim dim:0x1 VT: 0xC (Variant) elemSz:0x4 SAFlag: 0x440 (HaveIId | Disp)
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA65 FE8E 0100110001008000 Redim dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB23 FE8E 0100110001008000 Redim dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)
47 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8E_Redim.
Handler: 0x661050E6, unique to this slot (real opcode #648).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 47 occurrence(s) in PDFStreamDumper_p.exe.
Dim arr() As Long
ReDim arr(10)
ReDim Preserve arr(20)Description: draft, by claude-opus-4.7. Handler 0x661050E6, dispatch slot 0x66107F4C, modOpcodes line 614.
RedimPreserve
(4,0x8F)emittedhandler #649Arrayinferred_corpus11 corpus hitsRedimPreserve).Implements VB6 ReDim / ReDim Preserve. Operand stream carries the dimension count, VT element type code, element size, and a SafeArray flag mask. New bounds are popped from the stack (one I4 lower + I4 upper per dimension).
RedimPreserve copies existing elements that fall within the new bounds; pure Redim default-initializes all elements.
Emitted for every ReDim and ReDim Preserve.
Option Base 1
Private Type TR
s As String
End Type
Public Sub Main()
ReDim a(1 To 3)
ReDim Preserve a(1 To 4)
End Sub
Encoding, evidence and notes
Encoding: FE 8F (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
vbdec template: dim:%2 VT:%r elemSz:%2 SAFlag:%y
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.%r(VT): vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).%2(elemSz): immediate_word, 2 byte(s). 16-bit immediate.%y(SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.
Observed: FE8F 01000C0010008008 RedimPreserve dim:0x1 VT: 0xC (Variant) elemSz:0x10 SAFlag: 0x880 (HaveVarTyp | Var)
Form1.LoadPlugins @ 0x4644FC | 46463A FE8F 01000C0004004004 RedimPreserve dim:0x1 VT: 0xC (Variant) elemSz:0x4 SAFlag: 0x440 (HaveIId | Disp)
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EFDD FE8F 0100110001008000 RedimPreserve dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)
modZLIB.Proc_45E44C @ 0x45E44C | 45E630 FE8F 0100110001008000 RedimPreserve dim:0x1 VT: 0x11 (UI1) elemSz:0x1 SAFlag: 0x80 (HaveVarTyp)
11 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8F_RedimPreserve.
Handler: 0x6610916D, unique to this slot (real opcode #649).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.
Dim arr() As Long
ReDim arr(10)
ReDim Preserve arr(20)Description: draft, by claude-opus-4.7. Handler 0x6610916D, dispatch slot 0x66107F50, modOpcodes line 615.
RedimPreserveVar
(4,0x91)emittedhandler #651Arrayinferred_corpus8 corpus hitsReDim Preserve an array held in a Variant.Pops the new bounds and the Variant's address and resizes the contained SAFEARRAY, keeping existing elements (only the last dimension may change).
Operands: dimension count, SAFEARRAY flags.
Emitted for ReDim Preserve v(n) where v is a Variant (or a Variant UDT field). A typed dynamic array uses RedimPreserve (4,8F).
Private Type TR
v As Variant
End Type
Public Sub Main()
Dim r As TR
ReDim Preserve r.v(4)
End Sub
Encoding, evidence and notes
Encoding: FE 91 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: dim:%2 SAFlag:%y
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.%y(SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.
Observed: FE91 01000C20 RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)
fso.Proc_443C70 @ 0x443C70 | 443C9D FE91 01000C20 RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)
fso.Proc_442CEC @ 0x442CEC | 442D4D FE91 01000C20 RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)
CFunc.Proc_443BC0 @ 0x443BC0 | 443BED FE91 01000C20 RedimPreserveVar dim:0x1 SAFlag: 0x200C (Embedded)
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_91_RedimPreserveVar.
Handler: 0x66109196, unique to this slot (real opcode #651).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v = Array(1, 2)
ReDim Preserve v(4)Description: draft, by claude-opus-5-5. Handler 0x66109196, dispatch slot 0x66107F58, modOpcodes line 617.
RedimPreserveVarUdt
(5,0x3C)emittedhandler #768UDT / recordinferred_corpusReDim Preserve a Variant-held array of a public record type.As RedimVarUdt, preserving existing elements.
Emitted for ReDim Preserve v(n) As TPubRec.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim v As Variant
ReDim Preserve v(4) As TPubRec
End Sub
Encoding, evidence and notes
Encoding: FF 3C (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF3C 010024000000 RedimPreserveVarUdt
FF3C 010024000000 RedimPreserveVarUdt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3C_RedimPreserveVarUdt.
Handler: 0x661091F0, unique to this slot (real opcode #768).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim v As Variant
ReDim Preserve v(4) As TPubRec
End SubDescription: draft, by claude-opus-5-5. Handler 0x661091F0, dispatch slot 0x66108204, modOpcodes line 619.
RedimVar
(4,0x90)emittedhandler #650Arrayinferred_corpus7 corpus hitsReDim an array held in a Variant.Pops the bounds and the Variant's address, allocates a new SAFEARRAY (element type from VT:%r, Variant elements when unspecified) and stores it into the Variant (VT_ARRAY | vt), freeing any previous contents.
Operands: dimension count, VARTYPE, SAFEARRAY flags.
Emitted for ReDim v(n) [As T] where v is a Variant (or a Variant UDT field / class member). A typed dynamic array uses Redim (4,8E).
Public Sub Main()
Dim v As Variant
ReDim v(3) As Long
End Sub
Encoding, evidence and notes
Encoding: FE 90 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: dim:%2 VT:%r SAFlag:%y
Operands:
%2(dim): immediate_word, 2 byte(s). 16-bit immediate.%r(VT): vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).%y(SAFlag): safearray_flags, size varies. SAFEARRAY feature flags (FADF_*) as written to the array descriptor.
Observed: FE90 01000300 RedimVar dim:0x1 VT: 0x3 (I4) SAFlag: 0x6C14 (Embedded | FixedSz | Disp | Var)
fso.Proc_443C70 @ 0x443C70 | 443CCE FE90 01000C20 RedimVar dim:0x1 VT: 0x200C (Variant | ARRAY) SAFlag: 0x5C28 (Record | Disp | Var)
CFunc.Proc_443BC0 @ 0x443BC0 | 443C1E FE90 01000C20 RedimVar dim:0x1 VT: 0x200C (Variant | ARRAY) SAFlag: 0x5C28 (Record | Disp | Var)
modEscapes.Proc_4434E0 @ 0x4434E0 | 44353E FE90 01000C20 RedimVar dim:0x1 VT: 0x200C (Variant | ARRAY) SAFlag: 0x5C28 (Record | Disp | Var)
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_90_RedimVar.
Handler: 0x661091C7, unique to this slot (real opcode #650).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
ReDim v(3)Description: draft, by claude-opus-5-5. Handler 0x661091C7, dispatch slot 0x66107F54, modOpcodes line 616.
RedimVarUdt
(5,0x3B)emittedhandler #767UDT / recordinferred_corpusReDim a Variant as an array of a public record type.Pops bounds and the Variant, and allocates a SAFEARRAY of VT_RECORD with the given record type.
Operands (6 bytes): dimension count, record-type pool index, SAFEARRAY flags (observed 0100 2400 0000).
Emitted for ReDim v(n) As TPubRec where TPubRec comes from a type library (or a public class in an ActiveX DLL).
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim v As Variant
ReDim v(3) As TPubRec
End Sub
Encoding, evidence and notes
Encoding: FF 3B (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF3B 010024000000 RedimVarUdt
FF3B 010024000000 RedimVarUdt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3B_RedimVarUdt.
Handler: 0x661091CE, unique to this slot (real opcode #767).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim v As Variant
ReDim v(3) As TPubRec
End SubDescription: draft, by claude-opus-5-5. Handler 0x661091CE, dispatch slot 0x66108200, modOpcodes line 618.
Branch
Control-flow branch
Branch
(0,0x1E)emittedprimary of 2handler #29Control flowinferred_corpus384 corpus hitsBranch).Branch is an unconditional jump to the offset given by operand %l. BranchF pops the top-of-stack and jumps if it is false (zero / VARIANT_FALSE); BranchT jumps on true. Used to implement If/ElseIf/Else, Do While/Loop Until, and short-circuiting Boolean expressions.
Emitted by every conditional construct and unconditional GoTo.
Public Sub Main()
Dim n As Long
GoTo done
sub1:
Return
done:
End Sub
Encoding, evidence and notes
Encoding: 1E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Observed: 1E 0500 Branch loc_401451
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461474 1E E800 Branch loc_461490
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46154B 1E E301 Branch loc_46158B
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A7FD 1E A900 Branch loc_45A819
384 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1E_Branch.
Handler: 0x6610519D, shared by 2 dispatch slots (real opcode #29). This is the primary slot. Other slots: (3,03) Branch.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 384 occurrence(s) in PDFStreamDumper_p.exe.
If cond Then
' true branch
Else
' false branch
End IfDescription: draft, by claude-opus-4.7. Handler 0x6610519D, dispatch slot 0x66106D8C, modOpcodes line 391.
Branch
(3,0x03)not emitteddup of (0,1E)handler #29Control flowconfirmed_handlerBranch).Encoding, evidence and notes
Encoding: FD 03 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610519D, shared by 2 dispatch slots (real opcode #29). This is a duplicate slot of (0,1E) Branch. Other slots: (0,1E) Branch.
Description: none. Handler 0x6610519D, dispatch slot 0x66107920, modOpcodes line 392.
BranchF
(0,0x1C)emittedprimary of 2handler #27Control flowinferred_corpus1317 corpus hitsBranchF).Branch is an unconditional jump to the offset given by operand %l. BranchF pops the top-of-stack and jumps if it is false (zero / VARIANT_FALSE); BranchT jumps on true. Used to implement If/ElseIf/Else, Do While/Loop Until, and short-circuiting Boolean expressions.
Emitted by every conditional construct and unconditional GoTo.
Public Sub Main()
Dim a As Object, n As Long
If TypeOf a Is Collection Then n = 1
End Sub
Encoding, evidence and notes
Encoding: 1C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Observed: 1C 1200 BranchF loc_401472
Form1.LoadPlugins @ 0x4644FC | 464537 1C 9500 BranchF loc_464591
Form1.LoadPlugins @ 0x4644FC | 4645F2 1C FC00 BranchF loc_4645F8
Form1.LoadPlugins @ 0x4644FC | 4646B5 1C 5B02 BranchF loc_464757
1317 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1C_BranchF.
Handler: 0x661051C4, shared by 2 dispatch slots (real opcode #27). This is the primary slot. Other slots: (3,04) BranchF.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1317 occurrence(s) in PDFStreamDumper_p.exe.
If cond Then
' true branch
Else
' false branch
End IfDescription: draft, by claude-opus-4.7. Handler 0x661051C4, dispatch slot 0x66106D84, modOpcodes line 393.
BranchF
(3,0x04)not emitteddup of (0,1C)handler #27Control flowconfirmed_handlerBranchF).Encoding, evidence and notes
Encoding: FD 04 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661051C4, shared by 2 dispatch slots (real opcode #27). This is a duplicate slot of (0,1C) BranchF. Other slots: (0,1C) BranchF.
Description: none. Handler 0x661051C4, dispatch slot 0x66107924, modOpcodes line 394.
BranchFVar
(0,0x5C)not emittedprimary of 2handler #90Control flowinferred_corpusEncoding, evidence and notes
Encoding: 5C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109261, shared by 2 dispatch slots (real opcode #90). This is the primary slot. Other slots: (3,05) BranchFVar.
Description: none. Handler 0x66109261, dispatch slot 0x66106E84, modOpcodes line 395.
BranchFVar
(3,0x05)not emitteddup of (0,5C)handler #90Control flowconfirmed_handlerEncoding, evidence and notes
Encoding: FD 05 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109261, shared by 2 dispatch slots (real opcode #90). This is a duplicate slot of (0,5C) BranchFVar. Other slots: (0,5C) BranchFVar.
Description: none. Handler 0x66109261, dispatch slot 0x66107928, modOpcodes line 396.
BranchFVarFree
(3,0x06)not emittedhandler #472Control flowinferred_corpusEncoding, evidence and notes
Encoding: FD 06 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109289, unique to this slot (real opcode #472).
Description: none. Handler 0x66109289, dispatch slot 0x6610792C, modOpcodes line 400.
BranchT
(0,0x1D)emittedprimary of 2handler #28Control flowinferred_corpus4 corpus hitsPops a 16-bit Boolean; if it is non-zero, jumps to the proc-relative target %l, otherwise falls through.
Stack: [..., c:Bool] -> [...]
Emitted where the loop or test continues on a True condition, chiefly Loop While cond (jump back while True), and inside Select Case dispatch chains. If, Do While and Loop Until use BranchF. The operand is a proc-relative target.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long, o As Object
Do
Loop While v
End Sub
Function F() As Variant
End Function
Encoding, evidence and notes
Encoding: 1D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Observed: 1D 0000 BranchT loc_401494
modZLIB.Proc_4666C0 @ 0x4666C0 | 466A07 1D E401 BranchT loc_4668A4
fso.Proc_447C58 @ 0x447C58 | 447D02 1D 7300 BranchT loc_447CCB
Form2.ExtractFunction @ 0x45FB40 | 45FD81 1D 5D00 BranchT loc_45FB9D
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1D_BranchT.
Handler: 0x661051AF, shared by 2 dispatch slots (real opcode #28). This is the primary slot. Other slots: (3,07) BranchT.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Do
n = n + 1
Loop While n < 5Description: draft, by claude-opus-5-5. Handler 0x661051AF, dispatch slot 0x66106D88, modOpcodes line 397.
BranchT
(3,0x07)not emitteddup of (0,1D)handler #28Control flowconfirmed_handlerEncoding, evidence and notes
Encoding: FD 07 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661051AF, shared by 2 dispatch slots (real opcode #28). This is a duplicate slot of (0,1D) BranchT. Other slots: (0,1D) BranchT.
Description: none. Handler 0x661051AF, dispatch slot 0x66107930, modOpcodes line 398.
BranchTVar
(3,0x08)not emittedhandler #473Control flowinferred_corpusEncoding, evidence and notes
Encoding: FD 08 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610927C, unique to this slot (real opcode #473).
Description: none. Handler 0x6610927C, dispatch slot 0x66107934, modOpcodes line 399.
BranchTVarFree
(3,0x09)not emittedhandler #474Control flowinferred_corpusEncoding, evidence and notes
Encoding: FD 09 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661092AB, unique to this slot (real opcode #474).
Description: none. Handler 0x661092AB, dispatch slot 0x66107938, modOpcodes line 401.
COM
AddRef and related COM ref counting
AddRef
(4,0x97)not emittedhandler #656Object / COMconfirmed_msdocsAddRef.Performs an IUnknown::AddRef or Release on an object pointer at a tracked slot. Inserted by the compiler at object-reference assignments and frame cleanup to maintain correct ref counts.
Compiler-inserted at every object-reference lifetime boundary.
Encoding, evidence and notes
Encoding: FE 97 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B815, unique to this slot (real opcode #656).
Description: draft, by claude-opus-4.7. Handler 0x6610B815, dispatch slot 0x66107F70, modOpcodes line 450.
Cast
Type conversion Prefix: C<dest><src>
CAdVar
(2,0x34)emittedhandler #372Conversionconfirmed_msdocs9 corpus hitsPops a value of type Variant, pushes the equivalent value as address.
Stack: [..., a:Var] -> [..., a':Ad]
Treats the value as an opaque 32-bit address; no boundary checks.
Emitted at the boundary where a Variant value must be assigned to or passed as address.
Public Sub Main()
Dim o As Object, p As Object
Set p = o.Child
End Sub
Encoding, evidence and notes
Encoding: FC 34 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC34 CAdVar
Form1.LoadPlugins @ 0x4644FC | 464683 FC34 CAdVar
Form1.LoadPlugins @ 0x4644FC | 46476E FC34 CAdVar
Form1.Shutdown @ 0x442740 | 44276D FC34 CAdVar
9 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_34_CAdVar.
Handler: 0x6610552F, unique to this slot (real opcode #372).
Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610552F, dispatch slot 0x661075E4, modOpcodes line 863.
CBoolCy
(0,0x53)emittedprimary of 2handler #81Conversionconfirmed_msdocsPops a value of type Currency, pushes the equivalent value as Boolean.
Stack: [..., a:Cy] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Currency value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As Currency, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: 53, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 53 CBoolCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_53_CBoolCy.
Handler: 0x661095FC, shared by 2 dispatch slots (real opcode #81). This is the primary slot. Other slots: (2,55) CBoolCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x661095FC, dispatch slot 0x66106E60, modOpcodes line 792.
CBoolCy
(2,0x55)not emitteddup of (0,53)handler #81Conversionconfirmed_handlerAlias dispatch slot (2, 0x55) for the canonical CBoolCy at (0, 0x53); semantics are identical.
Pops a value of type Currency, pushes the equivalent value as Boolean.
Stack: [..., a:Cy] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Currency value must be assigned to or passed as Boolean.
Dim a As Currency, b As Boolean
b = CBool(a)
Encoding, evidence and notes
Encoding: FC 55 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661095FC, shared by 2 dispatch slots (real opcode #81). This is a duplicate slot of (0,53) CBoolCy. Other slots: (0,53) CBoolCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,53) CBoolCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661095FC, dispatch slot 0x66107668, modOpcodes line 874.
CBoolI4
(2,0x52)emittedhandler #390Conversionconfirmed_msdocs14 corpus hitsPops a value of type Long, pushes the equivalent value as Boolean.
Stack: [..., a:I4] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Long value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As Long, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 52 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC52 CBoolI4
modZLIB.Proc_45E44C @ 0x45E44C | 45E4B5 FC52 CBoolI4
modZLIB.Proc_45E44C @ 0x45E44C | 45E554 FC52 CBoolI4
modZLIB.Proc_45E44C @ 0x45E44C | 45E5AB FC52 CBoolI4
14 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_52_CBoolI4.
Handler: 0x661052D7, unique to this slot (real opcode #390).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x661052D7, dispatch slot 0x6610765C, modOpcodes line 871.
CBoolR4
(2,0x53)emittedprimary of 2handler #391Conversionconfirmed_msdocsPops a value of type Single, pushes the equivalent value as Boolean.
Stack: [..., a:R4] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Single value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As Single, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 53 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC53 CBoolR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_53_CBoolR4.
Handler: 0x66109605, shared by 2 dispatch slots (real opcode #391). This is the primary slot. Other slots: (2,54) CBoolR4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,53):
Dim a As Single, c As Boolean : c = CBool(a) - (2,54):
Dim a As Date, c As Boolean : c = CBool(a)
Finding: Compiler selects this slot for CBool(<Single>). (2,54) is used for Double/Date.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x66109605, dispatch slot 0x66107660, modOpcodes line 872.
CBoolR4
(2,0x54)emitteddup of (2,53)handler #391Conversionconfirmed_handlerAlias dispatch slot (2, 0x54) for the canonical CBoolR4 at (2, 0x53); semantics are identical.
Pops a value of type Single, pushes the equivalent value as Boolean.
Stack: [..., a:R4] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Single value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As Date, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 54 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC54 CBoolR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_54_CBoolR4.
Handler: 0x66109605, shared by 2 dispatch slots (real opcode #391). This is a duplicate slot of (2,53) CBoolR4. Other slots: (2,53) CBoolR4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,53):
Dim a As Single, c As Boolean : c = CBool(a) - (2,54):
Dim a As Date, c As Boolean : c = CBool(a)
Finding: Compiler selects this slot for CBool(<Double>) and CBool(<Date>). Effective meaning: CBoolR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,53) CBoolR4 (same handler, different slot)
Dim a As Single, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x66109605, dispatch slot 0x66107664, modOpcodes line 873.
CBoolStr
(2,0x57)emittedhandler #393Conversionconfirmed_msdocsPops a value of type String, pushes the equivalent value as Boolean.
Stack: [..., a:Str] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a String value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As String, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 57 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC57 CBoolStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_57_CBoolStr.
Handler: 0x661053BE, unique to this slot (real opcode #393).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x661053BE, dispatch slot 0x66107670, modOpcodes line 876.
CBoolUI1
(2,0x50)emitteddup of (2,51)handler #389Conversionconfirmed_msdocsPops a value of type Byte, pushes the equivalent value as Boolean.
Stack: [..., a:UI1] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Byte value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As Byte, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 50 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC50 CBoolUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_50_CBoolUI1.
Handler: 0x661052DD, shared by 2 dispatch slots (real opcode #389). This is a duplicate slot of (2,51) CBoolUI1. Other slots: (2,51) CBoolUI1.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,50):
Dim a As Byte, c As Boolean : c = CBool(a) - (2,51):
Dim a As Integer, c As Boolean : c = CBool(a)
Finding: Compiler selects this slot for CBool(<Byte>). (2,51) is used for Integer.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x661052DD, dispatch slot 0x66107654, modOpcodes line 869.
CBoolUI1
(2,0x51)emittedprimary of 2handler #389Conversionconfirmed_handler1 corpus hitsAlias dispatch slot (2, 0x51) for the canonical CBoolUI1 at (2, 0x50); semantics are identical.
Pops a value of type Byte, pushes the equivalent value as Boolean.
Stack: [..., a:UI1] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted at the boundary where a Byte value must be assigned to or passed as Boolean.
Public Sub Main()
Dim a As Integer, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 51 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC51 CBoolUI1
frmRefactor.cmdScroll_Event_0 @ 0x440C48 | 440C59 FC51 CBoolUI1
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_51_CBoolUI1.
Handler: 0x661052DD, shared by 2 dispatch slots (real opcode #389). This is the primary slot. Other slots: (2,50) CBoolUI1.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,50):
Dim a As Byte, c As Boolean : c = CBool(a) - (2,51):
Dim a As Integer, c As Boolean : c = CBool(a)
Finding: Compiler selects this slot for CBool(<Integer>), and for Integer arithmetic results assigned to Boolean. Effective meaning: CBoolI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,50) CBoolUI1 (same handler, different slot)
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Byte, b As Boolean
b = CBool(a)Description: draft, by claude-opus-4.7. Handler 0x661052DD, dispatch slot 0x66107658, modOpcodes line 870.
CBoolVar
(2,0x56)emittedhandler #392Conversionconfirmed_msdocs22 corpus hitsPops a value of type Variant, pushes the equivalent value as Boolean.
Stack: [..., a:Var] -> [..., a':Bool]
Zero source maps to False (0); any non-zero maps to True (-1).
Emitted when a Variant is used where a Boolean is required without an explicit conversion function: x = v with x As Boolean, a Variant passed to a ByVal Boolean parameter, or a late-bound property result stored into a Boolean. The explicit C...(v) function compiles to FnCBoolVar (2,4D) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.
Public Sub Main()
Dim a As Variant, c As Boolean
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 56 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC56 CBoolVar
Form1.lv_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x447E40 | 447EA7 FC56 CBoolVar
Form1.Form_Load @ 0x479DC0 | 47A560 FC56 CBoolVar
Form1.Form_Load @ 0x479DC0 | 47A5C5 FC56 CBoolVar
22 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_56_CBoolVar.
Handler: 0x661052FB, unique to this slot (real opcode #392).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 22 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, x As Boolean
v = 5
x = vDescription: draft, by claude-opus-5-5. Handler 0x661052FB, dispatch slot 0x6610766C, modOpcodes line 875.
CBoolVarNull
(5,0x1B)emittedhandler #751Conversionconfirmed_msdocs35 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim o As Object, n As Long
If o.A Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FF 1B (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF1B CBoolVarNull
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474097 FF1B CBoolVarNull
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474402 FF1B CBoolVarNull
Form1.Form_Load @ 0x479DC0 | 47AF55 FF1B CBoolVarNull
35 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_1B_CBoolVarNull.
Handler: 0x6610530D, unique to this slot (real opcode #751).
Corpus: 35 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610530D, dispatch slot 0x66108180, modOpcodes line 885.
CCyI2
(0,0xEF)emittedprimary of 3handler #236Conversionconfirmed_msdocsPops a value of type Integer, pushes the equivalent value as Currency.
Stack: [..., a:I2] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Integer value must be assigned to or passed as Currency.
Public Sub Main()
Dim a As Boolean, c As Currency
c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding: EF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EF CCyI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EF_CCyI2.
Handler: 0x66109596, shared by 3 dispatch slots (real opcode #236). This is the primary slot. Other slots: (2,04) CCyI2, (2,05) CCyI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, b As Currency
b = CCur(a)(2,0x04) CCyI2, (2,0x05) CCyI2
Description: draft, by claude-opus-4.7. Handler 0x66109596, dispatch slot 0x661070D0, modOpcodes line 806.
CCyI2
(2,0x04)not emitteddup of (0,EF)handler #236Conversionconfirmed_handlerAlias dispatch slot (2, 0x04) for the canonical CCyI2 at (0, 0xEF); semantics are identical.
Pops a value of type Integer, pushes the equivalent value as Currency.
Stack: [..., a:I2] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Integer value must be assigned to or passed as Currency.
Dim a As Integer, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding: FC 04 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109596, shared by 3 dispatch slots (real opcode #236). This is a duplicate slot of (0,EF) CCyI2. Other slots: (0,EF) CCyI2, (2,05) CCyI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,EF) CCyI2 (same handler, different slot)
(0,0xEF) CCyI2, (2,0x05) CCyI2
Description: draft, by claude-opus-4.7. Handler 0x66109596, dispatch slot 0x66107524, modOpcodes line 817.
CCyI2
(2,0x05)not emitteddup of (0,EF)handler #236Conversionconfirmed_handlerAlias dispatch slot (2, 0x05) for the canonical CCyI2 at (0, 0xEF); semantics are identical.
Pops a value of type Integer, pushes the equivalent value as Currency.
Stack: [..., a:I2] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Integer value must be assigned to or passed as Currency.
Dim a As Integer, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding: FC 05 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109596, shared by 3 dispatch slots (real opcode #236). This is a duplicate slot of (0,EF) CCyI2. Other slots: (0,EF) CCyI2, (2,04) CCyI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,EF) CCyI2 (same handler, different slot)
(0,0xEF) CCyI2, (2,0x04) CCyI2
Description: draft, by claude-opus-4.7. Handler 0x66109596, dispatch slot 0x66107528, modOpcodes line 818.
CCyI4
(0,0xF0)emittedprimary of 2handler #237Conversionconfirmed_msdocsPops a value of type Long, pushes the equivalent value as Currency.
Stack: [..., a:I4] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Long value must be assigned to or passed as Currency.
Public Sub Main()
Dim a As Long, c As Currency
c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding: F0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: F0 CCyI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F0_CCyI4.
Handler: 0x661095AC, shared by 2 dispatch slots (real opcode #237). This is the primary slot. Other slots: (2,06) CCyI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Long, b As Currency
b = CCur(a)Description: draft, by claude-opus-4.7. Handler 0x661095AC, dispatch slot 0x661070D4, modOpcodes line 807.
CCyI4
(2,0x06)not emitteddup of (0,F0)handler #237Conversionconfirmed_handlerAlias dispatch slot (2, 0x06) for the canonical CCyI4 at (0, 0xF0); semantics are identical.
Pops a value of type Long, pushes the equivalent value as Currency.
Stack: [..., a:I4] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Long value must be assigned to or passed as Currency.
Dim a As Long, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding: FC 06 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661095AC, shared by 2 dispatch slots (real opcode #237). This is a duplicate slot of (0,F0) CCyI4. Other slots: (0,F0) CCyI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,F0) CCyI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661095AC, dispatch slot 0x6610752C, modOpcodes line 819.
CCyR4
(0,0xF1)emittedprimary of 3handler #238Conversionconfirmed_msdocsPops a value of type Single, pushes the equivalent value as Currency.
Stack: [..., a:R4] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Single value must be assigned to or passed as Currency.
Public Sub Main()
Dim a As Date, c As Currency
c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding: F1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: F1 CCyR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F1_CCyR4.
Handler: 0x661095C1, shared by 3 dispatch slots (real opcode #238). This is the primary slot. Other slots: (2,07) CCyR4, (2,08) CCyR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, b As Currency
b = CCur(a)(2,0x07) CCyR4, (2,0x08) CCyR4
Description: draft, by claude-opus-4.7. Handler 0x661095C1, dispatch slot 0x661070D8, modOpcodes line 808.
CCyR4
(2,0x07)not emitteddup of (0,F1)handler #238Conversionconfirmed_handlerAlias dispatch slot (2, 0x07) for the canonical CCyR4 at (0, 0xF1); semantics are identical.
Pops a value of type Single, pushes the equivalent value as Currency.
Stack: [..., a:R4] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Single value must be assigned to or passed as Currency.
Dim a As Single, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding: FC 07 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661095C1, shared by 3 dispatch slots (real opcode #238). This is a duplicate slot of (0,F1) CCyR4. Other slots: (0,F1) CCyR4, (2,08) CCyR4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,F1) CCyR4 (same handler, different slot)
(0,0xF1) CCyR4, (2,0x08) CCyR4
Description: draft, by claude-opus-4.7. Handler 0x661095C1, dispatch slot 0x66107530, modOpcodes line 820.
CCyR4
(2,0x08)not emitteddup of (0,F1)handler #238Conversionconfirmed_handlerAlias dispatch slot (2, 0x08) for the canonical CCyR4 at (0, 0xF1); semantics are identical.
Pops a value of type Single, pushes the equivalent value as Currency.
Stack: [..., a:R4] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a Single value must be assigned to or passed as Currency.
Dim a As Single, b As Currency
b = CCur(a)
Encoding, evidence and notes
Encoding: FC 08 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661095C1, shared by 3 dispatch slots (real opcode #238). This is a duplicate slot of (0,F1) CCyR4. Other slots: (0,F1) CCyR4, (2,07) CCyR4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,F1) CCyR4 (same handler, different slot)
(0,0xF1) CCyR4, (2,0x07) CCyR4
Description: draft, by claude-opus-4.7. Handler 0x661095C1, dispatch slot 0x66107534, modOpcodes line 821.
CCyStr
(2,0x0B)emittedhandler #360Conversionconfirmed_msdocsPops a value of type String, pushes the equivalent value as Currency.
Stack: [..., a:Str] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted at the boundary where a String value must be assigned to or passed as Currency.
Public Sub Main()
Dim a As String, c As Currency
c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding: FC 0B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0B CCyStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0B_CCyStr.
Handler: 0x661096F2, unique to this slot (real opcode #360).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As Currency
b = CCur(a)Description: draft, by claude-opus-4.7. Handler 0x661096F2, dispatch slot 0x66107540, modOpcodes line 823.
CCyVar
(2,0x0A)emittedhandler #359Conversionconfirmed_msdocsPops a value of type Variant, pushes the equivalent value as Currency.
Stack: [..., a:Var] -> [..., a':Cy]
Result holds 4 decimal places of precision; out-of-range raises overflow.
Emitted when a Variant is used where a Currency is required without an explicit conversion function: x = v with x As Currency, a Variant passed to a ByVal Currency parameter, or a late-bound property result stored into a Currency. The explicit C...(v) function compiles to FnCCurVar (2,49) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.
Public Sub Main()
Dim a As Variant, c As Currency
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 0A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0A CCyVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0A_CCyVar.
Handler: 0x661095E9, unique to this slot (real opcode #359).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim v As Variant, x As Currency
v = 5
x = vDescription: draft, by claude-opus-5-5. Handler 0x661095E9, dispatch slot 0x6610753C, modOpcodes line 822.
CDargRef
(3,0x93)emittedhandler #548Conversioninferred_corpus99 corpus hitsPops a value of type Ref, pushes the equivalent value as Darg.
Stack: [..., a:Ref] -> [..., a':Darg]
Emitted at the boundary where a Ref value must be assigned to or passed as Darg.
Public Sub Main()
Dim o As Object, n As Long
o.DoIt n
End Sub
Encoding, evidence and notes
Encoding: FD 93 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %r
Operands:
%r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
Observed: FD93 0340 CDargRef 0x4003 (I4 | ByRef)
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E449 FD93 0840 CDargRef 0x4008 (Bstr | ByRef)
Form1.mnuExtractURI_Click @ 0x45774C | 4578AC FD93 0840 CDargRef 0x4008 (Bstr | ByRef)
Form1.mnuSecureDownload_Click @ 0x456570 | 4566DB FD93 0840 CDargRef 0x4008 (Bstr | ByRef)
99 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_93_CDargRef.
Handler: 0x66105511, unique to this slot (real opcode #548).
Corpus: 99 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105511, dispatch slot 0x66107B60, modOpcodes line 905.
CDargRefUdt
(5,0x32)emittedhandler #759UDT / recordinferred_corpusWraps the address of a public-record UDT in a by-reference Variant argument for IDispatch::Invoke.
Operands (4 bytes): record-type pool index and flags (observed 2440 0000).
Emitted for o.Take r with o As Object and r a typelib/public UDT.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As Object, r As TPubRec
o.Take r
End Sub
Encoding, evidence and notes
Encoding: FF 32 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF32 24400000 CDargRefUdt
FF32 24400000 CDargRefUdt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_32_CDargRefUdt.
Handler: 0x661098A7, unique to this slot (real opcode #759).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As Object, r As TPubRec
o.Take r
End SubDescription: draft, by claude-opus-5-5. Handler 0x661098A7, dispatch slot 0x661081DC, modOpcodes line 920.
CDateR8
(0,0xF2)emittedprimary of 2handler #239Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Single, c As Date
c = a
End Sub
Encoding, evidence and notes
Encoding: F2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: F2 CDateR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F2_CDateR8.
Handler: 0x66109705, shared by 2 dispatch slots (real opcode #239). This is the primary slot. Other slots: (2,47) CDateR8.
Description: draft, by claude-opus-4.7. Handler 0x66109705, dispatch slot 0x661070DC, modOpcodes line 809.
CDateR8
(2,0x47)not emitteddup of (0,F2)handler #239Conversionconfirmed_handlerAlias dispatch slot (2, 0x47) for the canonical CDateR8 at (0, 0xF2); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 47 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109705, shared by 2 dispatch slots (real opcode #239). This is a duplicate slot of (0,F2) CDateR8. Other slots: (0,F2) CDateR8.
Description: draft, by claude-opus-4.7. Handler 0x66109705, dispatch slot 0x66107630, modOpcodes line 868.
CDateStr
(4,0xC9)emittedhandler #687Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As String, c As Date
c = CDate(a)
End Sub
Encoding, evidence and notes
Encoding: FE C9 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEC9 CDateStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C9_CDateStr.
Handler: 0x661053EE, unique to this slot (real opcode #687).
Description: draft, by claude-opus-4.7. Handler 0x661053EE, dispatch slot 0x66108038, modOpcodes line 884.
CExtInstUnk
(5,0x08)not emittedhandler #734Object / COMconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FF 08 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B094, unique to this slot (real opcode #734).
Description: draft, by claude-opus-4.7. Handler 0x6610B094, dispatch slot 0x66108134, modOpcodes line 886.
CI2Cy
(0,0xE6)emittedprimary of 2handler #227Conversionconfirmed_msdocsPops a value of type Currency, pushes the equivalent value as Integer.
Stack: [..., a:Cy] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Currency value must be assigned to or passed as Integer.
Public Sub Main()
Dim a As Currency, c As Integer
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: E6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E6 CI2Cy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E6_CI2Cy.
Handler: 0x66109502, shared by 2 dispatch slots (real opcode #227). This is the primary slot. Other slots: (2,19) CI2Cy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Integer
b = CInt(a)Description: draft, by claude-opus-4.7. Handler 0x66109502, dispatch slot 0x661070AC, modOpcodes line 797.
CI2Cy
(2,0x19)not emitteddup of (0,E6)handler #227Conversionconfirmed_handlerAlias dispatch slot (2, 0x19) for the canonical CI2Cy at (0, 0xE6); semantics are identical.
Pops a value of type Currency, pushes the equivalent value as Integer.
Stack: [..., a:Cy] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Currency value must be assigned to or passed as Integer.
Dim a As Currency, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding: FC 19 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109502, shared by 2 dispatch slots (real opcode #227). This is a duplicate slot of (0,E6) CI2Cy. Other slots: (0,E6) CI2Cy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E6) CI2Cy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66109502, dispatch slot 0x66107578, modOpcodes line 835.
CI2I4
(0,0xE4)emittedprimary of 2handler #225Conversionconfirmed_msdocs143 corpus hitsPops a value of type Long, pushes the equivalent value as Integer.
Stack: [..., a:I4] -> [..., a':I2]
Emitted at the boundary where a Long value must be assigned to or passed as Integer.
Public Sub Main()
Dim a As Long, c As Integer
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: E4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E4 CI2I4
Form1.LoadPlugins @ 0x4644FC | 464622 E4 CI2I4
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4615F2 E4 CI2I4
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4615FE E4 CI2I4
143 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E4_CI2I4.
Handler: 0x661051D9, shared by 2 dispatch slots (real opcode #225). This is the primary slot. Other slots: (2,16) CI2I4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 143 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Integer
b = CInt(a)Description: draft, by claude-opus-4.7. Handler 0x661051D9, dispatch slot 0x661070A4, modOpcodes line 795.
CI2I4
(2,0x16)not emitteddup of (0,E4)handler #225Conversionconfirmed_handlerAlias dispatch slot (2, 0x16) for the canonical CI2I4 at (0, 0xE4); semantics are identical.
Pops a value of type Long, pushes the equivalent value as Integer.
Stack: [..., a:I4] -> [..., a':I2]
Emitted at the boundary where a Long value must be assigned to or passed as Integer.
Dim a As Long, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding: FC 16 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661051D9, shared by 2 dispatch slots (real opcode #225). This is a duplicate slot of (0,E4) CI2I4. Other slots: (0,E4) CI2I4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E4) CI2I4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661051D9, dispatch slot 0x6610756C, modOpcodes line 832.
CI2R8
(0,0xE5)emittedprimary of 3handler #226Conversionconfirmed_msdocs8 corpus hitsPops a value of type Double, pushes the equivalent value as Integer.
Stack: [..., a:R8] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Double value must be assigned to or passed as Integer.
Public Sub Main()
Dim a As Date, c As Integer
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: E5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E5 CI2R8
Form1.Form_Resize @ 0x474F3C | 474F61 E5 CI2R8
Form1.Form_Resize @ 0x474F3C | 474F86 E5 CI2R8
Form2.Proc_453E3C @ 0x453E3C | 453E61 E5 CI2R8
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E5_CI2R8.
Handler: 0x661051F5, shared by 3 dispatch slots (real opcode #226). This is the primary slot. Other slots: (2,17) CI2R8, (2,18) CI2R8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Integer
b = CInt(a)(2,0x17) CI2R8, (2,0x18) CI2R8
Description: draft, by claude-opus-4.7. Handler 0x661051F5, dispatch slot 0x661070A8, modOpcodes line 796.
CI2R8
(2,0x17)not emitteddup of (0,E5)handler #226Conversionconfirmed_handlerAlias dispatch slot (2, 0x17) for the canonical CI2R8 at (0, 0xE5); semantics are identical.
Pops a value of type Double, pushes the equivalent value as Integer.
Stack: [..., a:R8] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Double value must be assigned to or passed as Integer.
Dim a As Double, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding: FC 17 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661051F5, shared by 3 dispatch slots (real opcode #226). This is a duplicate slot of (0,E5) CI2R8. Other slots: (0,E5) CI2R8, (2,18) CI2R8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E5) CI2R8 (same handler, different slot)
(0,0xE5) CI2R8, (2,0x18) CI2R8
Description: draft, by claude-opus-4.7. Handler 0x661051F5, dispatch slot 0x66107570, modOpcodes line 833.
CI2R8
(2,0x18)not emitteddup of (0,E5)handler #226Conversionconfirmed_handlerAlias dispatch slot (2, 0x18) for the canonical CI2R8 at (0, 0xE5); semantics are identical.
Pops a value of type Double, pushes the equivalent value as Integer.
Stack: [..., a:R8] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Double value must be assigned to or passed as Integer.
Dim a As Double, b As Integer
b = CInt(a)
Encoding, evidence and notes
Encoding: FC 18 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661051F5, shared by 3 dispatch slots (real opcode #226). This is a duplicate slot of (0,E5) CI2R8. Other slots: (0,E5) CI2R8, (2,17) CI2R8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E5) CI2R8 (same handler, different slot)
(0,0xE5) CI2R8, (2,0x17) CI2R8
Description: draft, by claude-opus-4.7. Handler 0x661051F5, dispatch slot 0x66107574, modOpcodes line 834.
CI2Str
(2,0x1B)emittedhandler #368Conversionconfirmed_msdocs3 corpus hitsPops a value of type String, pushes the equivalent value as Integer.
Stack: [..., a:Str] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a String value must be assigned to or passed as Integer.
Public Sub Main()
Dim a As String, c As Integer
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: FC 1B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC1B CI2Str
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBF9 FC1B CI2Str
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C44F FC1B CI2Str
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C45E FC1B CI2Str
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_1B_CI2Str.
Handler: 0x661053C8, unique to this slot (real opcode #368).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As Integer
b = CInt(a)Description: draft, by claude-opus-4.7. Handler 0x661053C8, dispatch slot 0x66107580, modOpcodes line 837.
CI2UI1
(2,0x14)emittedhandler #367Conversionconfirmed_msdocs62 corpus hitsPops a value of type Byte, pushes the equivalent value as Integer.
Stack: [..., a:UI1] -> [..., a':I2]
Emitted at the boundary where a Byte value must be assigned to or passed as Integer.
Public Sub Main()
Dim a As Byte, c As Integer
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: FC 14 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC14 CI2UI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA97 FC14 CI2UI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAAC FC14 CI2UI1
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAC2 FC14 CI2UI1
62 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_14_CI2UI1.
Handler: 0x661051E9, unique to this slot (real opcode #367).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 62 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Byte, b As Integer
b = CInt(a)Description: draft, by claude-opus-4.7. Handler 0x661051E9, dispatch slot 0x66107564, modOpcodes line 831.
CI2Var
(0,0x55)emittedprimary of 2handler #83Conversionconfirmed_msdocs37 corpus hitsPops a value of type Variant, pushes the equivalent value as Integer.
Stack: [..., a:Var] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted when a Variant is used where a Integer is required without an explicit conversion function: x = v with x As Integer, a Variant passed to a ByVal Integer parameter, or a late-bound property result stored into a Integer. The explicit C...(v) function compiles to FnCIntVar (2,45) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.
Public Sub Main()
Dim a As Variant, c As Integer
c = a
End Sub
Encoding, evidence and notes
Encoding: 55, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 55 CI2Var
Form1.DoEventsFor @ 0x44256C | 442582 55 CI2Var
Form1.Form_Load @ 0x479DC0 | 47A425 55 CI2Var
Form1.Form_Load @ 0x479DC0 | 47A468 55 CI2Var
37 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_55_CI2Var.
Handler: 0x66105216, shared by 2 dispatch slots (real opcode #83). This is the primary slot. Other slots: (2,1A) CI2Var.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 37 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, x As Integer
v = 5
x = vDescription: draft, by claude-opus-5-5. Handler 0x66105216, dispatch slot 0x66106E68, modOpcodes line 793.
CI2Var
(2,0x1A)not emitteddup of (0,55)handler #83Conversionconfirmed_handlerDispatch slot (2, 0x1A) runs the same MSVBVM60 handler as (0,55) CI2Var; runtime behaviour is identical.
Pops a value of type Variant, pushes the equivalent value as Integer.
Stack: [..., a:Var] -> [..., a':I2]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (implicit Variant to Integer) compiles to (0,55) CI2Var instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 1A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105216, shared by 2 dispatch slots (real opcode #83). This is a duplicate slot of (0,55) CI2Var. Other slots: (0,55) CI2Var.
Description: draft, by claude-opus-5-5. Handler 0x66105216, dispatch slot 0x6610757C, modOpcodes line 836.
CI4Cy
(0,0xE9)emittedprimary of 2handler #230Conversionconfirmed_msdocsPops a value of type Currency, pushes the equivalent value as Long.
Stack: [..., a:Cy] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Currency value must be assigned to or passed as Long.
Public Sub Main()
Dim a As Currency, c As Long
c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding: E9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E9 CI4Cy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E9_CI4Cy.
Handler: 0x66109513, shared by 2 dispatch slots (real opcode #230). This is the primary slot. Other slots: (2,21) CI4Cy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Long
b = CLng(a)Description: draft, by claude-opus-4.7. Handler 0x66109513, dispatch slot 0x661070B8, modOpcodes line 800.
CI4Cy
(2,0x21)not emitteddup of (0,E9)handler #230Conversionconfirmed_handlerAlias dispatch slot (2, 0x21) for the canonical CI4Cy at (0, 0xE9); semantics are identical.
Pops a value of type Currency, pushes the equivalent value as Long.
Stack: [..., a:Cy] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Currency value must be assigned to or passed as Long.
Dim a As Currency, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding: FC 21 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109513, shared by 2 dispatch slots (real opcode #230). This is a duplicate slot of (0,E9) CI4Cy. Other slots: (0,E9) CI4Cy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E9) CI4Cy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66109513, dispatch slot 0x66107598, modOpcodes line 842.
CI4R8
(0,0xE8)emittedprimary of 3handler #229Conversionconfirmed_msdocs18 corpus hitsPops a value of type Double, pushes the equivalent value as Long.
Stack: [..., a:R8] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Double value must be assigned to or passed as Long.
Public Sub Main()
Dim a As Date, c As Long
c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding: E8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E8 CI4R8
Form1.cmdDecode_Click @ 0x4775C0 | 477E89 E8 CI4R8
Form1.cmdDecode_Click @ 0x4775C0 | 477EB0 E8 CI4R8
fso.Proc_4468A8 @ 0x4468A8 | 446913 E8 CI4R8
18 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E8_CI4R8.
Handler: 0x66105237, shared by 3 dispatch slots (real opcode #229). This is the primary slot. Other slots: (2,1F) CI4R8, (2,20) CI4R8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 18 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Long
b = CLng(a)(2,0x1F) CI4R8, (2,0x20) CI4R8
Description: draft, by claude-opus-4.7. Handler 0x66105237, dispatch slot 0x661070B4, modOpcodes line 799.
CI4R8
(2,0x1F)not emitteddup of (0,E8)handler #229Conversionconfirmed_handlerAlias dispatch slot (2, 0x1F) for the canonical CI4R8 at (0, 0xE8); semantics are identical.
Pops a value of type Double, pushes the equivalent value as Long.
Stack: [..., a:R8] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Double value must be assigned to or passed as Long.
Dim a As Double, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding: FC 1F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105237, shared by 3 dispatch slots (real opcode #229). This is a duplicate slot of (0,E8) CI4R8. Other slots: (0,E8) CI4R8, (2,20) CI4R8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E8) CI4R8 (same handler, different slot)
(0,0xE8) CI4R8, (2,0x20) CI4R8
Description: draft, by claude-opus-4.7. Handler 0x66105237, dispatch slot 0x66107590, modOpcodes line 840.
CI4R8
(2,0x20)not emitteddup of (0,E8)handler #229Conversionconfirmed_handlerAlias dispatch slot (2, 0x20) for the canonical CI4R8 at (0, 0xE8); semantics are identical.
Pops a value of type Double, pushes the equivalent value as Long.
Stack: [..., a:R8] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Double value must be assigned to or passed as Long.
Dim a As Double, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding: FC 20 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105237, shared by 3 dispatch slots (real opcode #229). This is a duplicate slot of (0,E8) CI4R8. Other slots: (0,E8) CI4R8, (2,1F) CI4R8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E8) CI4R8 (same handler, different slot)
(0,0xE8) CI4R8, (2,0x1F) CI4R8
Description: draft, by claude-opus-4.7. Handler 0x66105237, dispatch slot 0x66107594, modOpcodes line 841.
CI4Str
(0,0x50)emittedprimary of 2handler #79Conversionconfirmed_msdocs15 corpus hitsPops a value of type String, pushes the equivalent value as Long.
Stack: [..., a:Str] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a String value must be assigned to or passed as Long.
Public Sub Main()
Dim a As String, c As Long
c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding: 50, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 50 CI4Str
Form1.mnuDebugBreakAtStream_Click @ 0x44802C | 448065 50 CI4Str
Form2.mnuSc2ExeMain_Click @ 0x45400C | 4540CB 50 CI4Str
modEscapes.Proc_460438 @ 0x460438 | 4604F5 50 CI4Str
15 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_50_CI4Str.
Handler: 0x661053D2, shared by 2 dispatch slots (real opcode #79). This is the primary slot. Other slots: (2,23) CI4Str.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 15 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As Long
b = CLng(a)Description: draft, by claude-opus-4.7. Handler 0x661053D2, dispatch slot 0x66106E54, modOpcodes line 791.
CI4Str
(2,0x23)not emitteddup of (0,50)handler #79Conversionconfirmed_handlerAlias dispatch slot (2, 0x23) for the canonical CI4Str at (0, 0x50); semantics are identical.
Pops a value of type String, pushes the equivalent value as Long.
Stack: [..., a:Str] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a String value must be assigned to or passed as Long.
Dim a As String, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding: FC 23 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661053D2, shared by 2 dispatch slots (real opcode #79). This is a duplicate slot of (0,50) CI4Str. Other slots: (0,50) CI4Str.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,50) CI4Str (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661053D2, dispatch slot 0x661075A0, modOpcodes line 844.
CI4UI1
(0,0xE7)emittedprimary of 3handler #228Conversionconfirmed_msdocs83 corpus hitsPops a value of type Byte, pushes the equivalent value as Long.
Stack: [..., a:UI1] -> [..., a':I4]
Emitted at the boundary where a Byte value must be assigned to or passed as Long.
Public Sub Main()
Dim n As Long
n = DoEvents
End Sub
Encoding, evidence and notes
Encoding: E7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E7 CI4UI1
Form1.LoadPlugins @ 0x4644FC | 464633 E7 CI4UI1
Form1.LoadPlugins @ 0x4644FC | 464649 E7 CI4UI1
Form1.LoadPlugins @ 0x4644FC | 464688 E7 CI4UI1
83 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E7_CI4UI1.
Handler: 0x66105228, shared by 3 dispatch slots (real opcode #228). This is the primary slot. Other slots: (2,1C) CI4UI1, (2,1D) CI4UI1.
Finding: Probe: emitted for CLng(<Integer>) and CLng(<Boolean>) (I2 to I4 sign extension). A Byte source is first widened with (2,0D). The UI1 in the name does not describe the source the compiler uses it for.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 83 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Byte, b As Long
b = CLng(a)(2,0x1C) CI4UI1, (2,0x1D) CI4UI1
Description: draft, by claude-opus-4.7. Handler 0x66105228, dispatch slot 0x661070B0, modOpcodes line 798.
CI4UI1
(2,0x1C)not emitteddup of (0,E7)handler #228Conversionconfirmed_handlerAlias dispatch slot (2, 0x1C) for the canonical CI4UI1 at (0, 0xE7); semantics are identical.
Pops a value of type Byte, pushes the equivalent value as Long.
Stack: [..., a:UI1] -> [..., a':I4]
Emitted at the boundary where a Byte value must be assigned to or passed as Long.
Dim a As Byte, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding: FC 1C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105228, shared by 3 dispatch slots (real opcode #228). This is a duplicate slot of (0,E7) CI4UI1. Other slots: (0,E7) CI4UI1, (2,1D) CI4UI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E7) CI4UI1 (same handler, different slot)
(0,0xE7) CI4UI1, (2,0x1D) CI4UI1
Description: draft, by claude-opus-4.7. Handler 0x66105228, dispatch slot 0x66107584, modOpcodes line 838.
CI4UI1
(2,0x1D)not emitteddup of (0,E7)handler #228Conversionconfirmed_handlerAlias dispatch slot (2, 0x1D) for the canonical CI4UI1 at (0, 0xE7); semantics are identical.
Pops a value of type Byte, pushes the equivalent value as Long.
Stack: [..., a:UI1] -> [..., a':I4]
Emitted at the boundary where a Byte value must be assigned to or passed as Long.
Dim a As Byte, b As Long
b = CLng(a)
Encoding, evidence and notes
Encoding: FC 1D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105228, shared by 3 dispatch slots (real opcode #228). This is a duplicate slot of (0,E7) CI4UI1. Other slots: (0,E7) CI4UI1, (2,1C) CI4UI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E7) CI4UI1 (same handler, different slot)
(0,0xE7) CI4UI1, (2,0x1C) CI4UI1
Description: draft, by claude-opus-4.7. Handler 0x66105228, dispatch slot 0x66107588, modOpcodes line 839.
CI4Var
(2,0x22)emittedhandler #369Conversionconfirmed_msdocs217 corpus hitsPops a value of type Variant, pushes the equivalent value as Long.
Stack: [..., a:Var] -> [..., a':I4]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted when a Variant is used where a Long is required without an explicit conversion function: x = v with x As Long, a Variant passed to a ByVal Long parameter, or a late-bound property result stored into a Long. The explicit C...(v) function compiles to FnCLngVar (2,46) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.
Public Sub Main()
Dim a As Variant, c As Long
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 22 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC22 CI4Var
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C5F FC22 CI4Var
Form1.mnuJavascriptUI_Click @ 0x45B844 | 45B94F FC22 CI4Var
modZLIB.Proc_4666C0 @ 0x4666C0 | 466956 FC22 CI4Var
217 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_22_CI4Var.
Handler: 0x66105258, unique to this slot (real opcode #369).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 217 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, x As Long
v = 5
x = vDescription: draft, by claude-opus-5-5. Handler 0x66105258, dispatch slot 0x6610759C, modOpcodes line 843.
CR4I4
(2,0x26)not emitteddup of (0,EC)handler #233Conversionconfirmed_msdocsDispatch slot (2, 0x26) runs the same MSVBVM60 handler as (0,EC) CR8I4; runtime behaviour is identical.
Pops a value of type Long, pushes the equivalent value as Double.
Stack: [..., a:I4] -> [..., a':R8]
Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Long to floating point) compiles to (0,EC) CR8I4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 26 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610527A, shared by 3 dispatch slots (real opcode #233). This is a duplicate slot of (0,EC) CR8I4. Other slots: (0,EC) CR8I4, (2,2E) CR4I4.
(0,0xEC) CR8I4, (2,0x2E) CR4I4
Description: draft, by claude-opus-5-5. Handler 0x6610527A, dispatch slot 0x661075AC, modOpcodes line 851.
CR4I4
(2,0x2E)not emitteddup of (0,EC)handler #233Conversionconfirmed_handlerDispatch slot (2, 0x2E) runs the same MSVBVM60 handler as (0,EC) CR8I4; runtime behaviour is identical.
Pops a value of type Long, pushes the equivalent value as Double.
Stack: [..., a:I4] -> [..., a':R8]
Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Long to floating point) compiles to (0,EC) CR8I4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 2E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610527A, shared by 3 dispatch slots (real opcode #233). This is a duplicate slot of (0,EC) CR8I4. Other slots: (0,EC) CR8I4, (2,26) CR4I4.
(0,0xEC) CR8I4, (2,0x26) CR4I4
Description: draft, by claude-opus-5-5. Handler 0x6610527A, dispatch slot 0x661075CC, modOpcodes line 857.
CR4R4
(0,0xEA)emittedprimary of 3handler #231Conversionconfirmed_msdocs2 corpus hitsRounds ST0 to 32-bit single precision (store and reload as a 4-byte float) and leaves it on the FPU stack.
Stack: [..., x:R8 (ST0)] -> [..., x':R4 (ST0)]
Emitted when a Double-typed value (a Double literal or a non-HRESULT method returning float) meets a Single operand: the compiler rounds the Double side to Single precision before comparing. Probe: If s > 2.5 Then, with s As Single. Explicit CSng(<Double>) uses CSng (2,40) instead.
Public Sub Main()
Dim a As Single, n As Long
If a > 2.5 Then n = 1
End Sub
Encoding, evidence and notes
Encoding: EA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EA CR4R4
Form2.Form_Resize @ 0x46537C | 465606 EA CR4R4
Form2.Form_Resize @ 0x46537C | 46568D EA CR4R4
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EA_CR4R4.
Handler: 0x6610528A, shared by 3 dispatch slots (real opcode #231). This is the primary slot. Other slots: (2,27) CR4R8, (2,28) CR4R8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim s As Single, n As Long
s = 1
If s > 2.5 Then n = 1(2,0x27) CR4R8, (2,0x28) CR4R8
Description: draft, by claude-opus-5-5. Handler 0x6610528A, dispatch slot 0x661070BC, modOpcodes line 801.
CR4R8
(2,0x27)not emitteddup of (0,EA)handler #231Conversionconfirmed_msdocsDispatch slot (2, 0x27) runs the same MSVBVM60 handler as (0,EA) CR4R4; runtime behaviour is identical.
Rounds ST0 to 32-bit single precision (store and reload as a 4-byte float) and leaves it on the FPU stack.
Stack: [..., x:R8 (ST0)] -> [..., x':R4 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (rounding to Single (CSng(Double) uses (2,40))) compiles to (0,EA) CR4R4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 27 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610528A, shared by 3 dispatch slots (real opcode #231). This is a duplicate slot of (0,EA) CR4R4. Other slots: (0,EA) CR4R4, (2,28) CR4R8.
(0,0xEA) CR4R4, (2,0x28) CR4R8
Description: draft, by claude-opus-5-5. Handler 0x6610528A, dispatch slot 0x661075B0, modOpcodes line 852.
CR4R8
(2,0x28)not emitteddup of (0,EA)handler #231Conversionconfirmed_handlerDispatch slot (2, 0x28) runs the same MSVBVM60 handler as (0,EA) CR4R4; runtime behaviour is identical.
Rounds ST0 to 32-bit single precision (store and reload as a 4-byte float) and leaves it on the FPU stack.
Stack: [..., x:R8 (ST0)] -> [..., x':R4 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (rounding to Single (CSng(Double) uses (2,40))) compiles to (0,EA) CR4R4 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 28 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610528A, shared by 3 dispatch slots (real opcode #231). This is a duplicate slot of (0,EA) CR4R4. Other slots: (0,EA) CR4R4, (2,27) CR4R8.
(0,0xEA) CR4R4, (2,0x27) CR4R8
Description: draft, by claude-opus-5-5. Handler 0x6610528A, dispatch slot 0x661075B4, modOpcodes line 853.
CR4Str
(2,0x2B)emittedprimary of 2handler #370Conversionconfirmed_msdocsPops a value of type String, pushes the equivalent value as Single.
Stack: [..., a:Str] -> [..., a':R4]
Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.
Emitted at the boundary where a String value must be assigned to or passed as Single.
Public Sub Main()
Dim a As String, c As Single
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 2B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC2B CR4Str
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_2B_CR4Str.
Handler: 0x661053E4, shared by 2 dispatch slots (real opcode #370). This is the primary slot. Other slots: (2,43) FnCSngStr.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,2B):
Dim a As String, c As Single : c = a - (2,43):
Dim a As String, c As Single : c = CSng(a)
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,43) FnCSngStr (same handler, different slot)
Dim a As String, b As Single
b = CSng(a)Description: draft, by claude-opus-4.7. Handler 0x661053E4, dispatch slot 0x661075C0, modOpcodes line 856.
CR4Var
(0,0x42)emitteddup of (2,2A)handler #65Conversionconfirmed_msdocsPops a Variant, converts it to a floating-point value and leaves it on the FPU stack (ST0). Raises error 13 if the Variant cannot be converted.
Stack: [..., v:Var] -> [..., r:R8 (ST0)]
Probe evidence: d = v with d As Double emits this slot (0,42), while s = v with s As Single emits (2,2A), which is named CR8Var. The names appear swapped. Both slots share one handler, which converts the Variant onto the FPU stack; the target type only decides the following store (FStFPR8 vs FStFPR4). Explicit CDbl(v) compiles to FnCDblVar (2,48).
Public Sub Main()
Dim a As Variant, c As Double
c = a
End Sub
Encoding, evidence and notes
Encoding: 42, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 42 CR4Var
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_42_CR4Var.
Handler: 0x661052C6, shared by 3 dispatch slots (real opcode #65). This is a duplicate slot of (2,2A) CR8Var. Other slots: (2,2A) CR8Var, (2,32) CR8Var.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,42):
Dim a As Variant, c As Double : c = a - (2,2A):
Dim a As Variant, c As Single : c = a
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim v As Variant, d As Double
v = 5
d = v(2,0x2A) CR8Var, (2,0x32) CR8Var
Description: draft, by claude-opus-5-5. Handler 0x661052C6, dispatch slot 0x66106E1C, modOpcodes line 887.
CR8Cy
(0,0xEE)emittedprimary of 3handler #235Conversionconfirmed_msdocsPops the 8-byte scaled Currency, divides by 10,000 and pushes the result onto the FPU stack.
Stack: [..., c:Cy] -> [..., r:R8 (ST0)]
Emitted wherever a Currency value enters a floating-point context: assigning Currency to Single/Double/Date, Currency / and ^, and Currency mixed with Single/Double in *. Explicit CDbl(<Currency>) compiles to FnCDblCy (2,39).
Public Sub Main()
Dim a As Currency, c As Single
c = a
End Sub
Encoding, evidence and notes
Encoding: EE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EE CR8Cy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EE_CR8Cy.
Handler: 0x66109524, shared by 3 dispatch slots (real opcode #235). This is the primary slot. Other slots: (2,29) CR8Cy, (2,31) CR8Cy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double
c = 1.5@
d = c(2,0x29) CR8Cy, (2,0x31) CR8Cy
Description: draft, by claude-opus-5-5. Handler 0x66109524, dispatch slot 0x661070CC, modOpcodes line 805.
CR8Cy
(2,0x29)not emitteddup of (0,EE)handler #235Conversionconfirmed_handlerDispatch slot (2, 0x29) runs the same MSVBVM60 handler as (0,EE) CR8Cy; runtime behaviour is identical.
Pops the 8-byte scaled Currency, divides by 10,000 and pushes the result onto the FPU stack.
Stack: [..., c:Cy] -> [..., r:R8 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency to floating point) compiles to (0,EE) CR8Cy instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 29 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109524, shared by 3 dispatch slots (real opcode #235). This is a duplicate slot of (0,EE) CR8Cy. Other slots: (0,EE) CR8Cy, (2,31) CR8Cy.
(0,0xEE) CR8Cy, (2,0x31) CR8Cy
Description: draft, by claude-opus-5-5. Handler 0x66109524, dispatch slot 0x661075B8, modOpcodes line 854.
CR8Cy
(2,0x31)not emitteddup of (0,EE)handler #235Conversionconfirmed_handlerDispatch slot (2, 0x31) runs the same MSVBVM60 handler as (0,EE) CR8Cy; runtime behaviour is identical.
Pops the 8-byte scaled Currency, divides by 10,000 and pushes the result onto the FPU stack.
Stack: [..., c:Cy] -> [..., r:R8 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency to floating point) compiles to (0,EE) CR8Cy instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 31 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109524, shared by 3 dispatch slots (real opcode #235). This is a duplicate slot of (0,EE) CR8Cy. Other slots: (0,EE) CR8Cy, (2,29) CR8Cy.
(0,0xEE) CR8Cy, (2,0x29) CR8Cy
Description: draft, by claude-opus-5-5. Handler 0x66109524, dispatch slot 0x661075D8, modOpcodes line 860.
CR8I2
(0,0xEB)emittedprimary of 7handler #232Conversionconfirmed_msdocs117 corpus hitsPops a value of type Integer, pushes the equivalent value as Double.
Stack: [..., a:I2] -> [..., a':R8]
Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.
Emitted at the boundary where a Integer value must be assigned to or passed as Double.
Public Sub Main()
Dim a As Boolean, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: EB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EB CR8I2
Form1.cmdAbortProcessing_Click @ 0x441954 | 441990 EB CR8I2
Form1.Form_Resize @ 0x474F3C | 474FA0 EB CR8I2
Form1.Form_Resize @ 0x474F3C | 474FAA EB CR8I2
117 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EB_CR8I2.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is the primary slot. Other slots: (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 117 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Double
b = CDbl(a)(2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661070C0, modOpcodes line 802.
CR8I4
(0,0xEC)emittedprimary of 3handler #233Conversionconfirmed_msdocs21 corpus hitsPops a value of type Long, pushes the equivalent value as Double.
Stack: [..., a:I4] -> [..., a':R8]
Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.
Emitted at the boundary where a Long value must be assigned to or passed as Double.
Public Sub Main()
Dim a As Long, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: EC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: EC CR8I4
Form1.cmdDecode_Click @ 0x4775C0 | 477E83 EC CR8I4
Form1.cmdDecode_Click @ 0x4775C0 | 477EAA EC CR8I4
Form1.cmdDecode_Click @ 0x4775C0 | 477EE3 EC CR8I4
21 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_EC_CR8I4.
Handler: 0x6610527A, shared by 3 dispatch slots (real opcode #233). This is the primary slot. Other slots: (2,26) CR4I4, (2,2E) CR4I4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 21 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Double
b = CDbl(a)(2,0x26) CR4I4, (2,0x2E) CR4I4
Description: draft, by claude-opus-4.7. Handler 0x6610527A, dispatch slot 0x661070C4, modOpcodes line 803.
CR8R4
(2,0x2F)not emitteddup of (0,ED)handler #234Conversionconfirmed_msdocsDispatch slot (2, 0x2F) runs the same MSVBVM60 handler as (0,ED) CR8R8; runtime behaviour is identical.
Leaves the floating-point value in ST0 as a 64-bit double (no numeric change for Date/Double sources).
Stack: [..., x (ST0)] -> [..., x:R8 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (FPU retype to Double) compiles to (0,ED) CR8R8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 2F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661052A8, shared by 3 dispatch slots (real opcode #234). This is a duplicate slot of (0,ED) CR8R8. Other slots: (0,ED) CR8R8, (2,30) CR8R4.
(0,0xED) CR8R8, (2,0x30) CR8R4
Description: draft, by claude-opus-5-5. Handler 0x661052A8, dispatch slot 0x661075D0, modOpcodes line 858.
CR8R4
(2,0x30)not emitteddup of (0,ED)handler #234Conversionconfirmed_handlerDispatch slot (2, 0x30) runs the same MSVBVM60 handler as (0,ED) CR8R8; runtime behaviour is identical.
Leaves the floating-point value in ST0 as a 64-bit double (no numeric change for Date/Double sources).
Stack: [..., x (ST0)] -> [..., x:R8 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (FPU retype to Double) compiles to (0,ED) CR8R8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 30 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661052A8, shared by 3 dispatch slots (real opcode #234). This is a duplicate slot of (0,ED) CR8R8. Other slots: (0,ED) CR8R8, (2,2F) CR8R4.
(0,0xED) CR8R8, (2,0x2F) CR8R4
Description: draft, by claude-opus-5-5. Handler 0x661052A8, dispatch slot 0x661075D4, modOpcodes line 859.
CR8R8
(0,0xED)emittedprimary of 3handler #234Conversionconfirmed_msdocs2 corpus hitsLeaves the floating-point value in ST0 as a 64-bit double (no numeric change for Date/Double sources).
Stack: [..., x (ST0)] -> [..., x:R8 (ST0)]
Emitted for CDbl(<Date>), where the bits are already a double and only the static type changes, and when a Single is compared with a Long literal that was converted to floating point. Explicit CDbl(<Double>) emits nothing.
Public Sub Main()
Dim a As Date, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: ED, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: ED CR8R8
Form2.Proc_4429BC @ 0x4429BC | 4429FB ED CR8R8
Form2.Proc_4429BC @ 0x4429BC | 442A0C ED CR8R8
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_ED_CR8R8.
Handler: 0x661052A8, shared by 3 dispatch slots (real opcode #234). This is the primary slot. Other slots: (2,2F) CR8R4, (2,30) CR8R4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim dt As Date, d As Double
dt = Now
d = CDbl(dt)(2,0x2F) CR8R4, (2,0x30) CR8R4
Description: draft, by claude-opus-5-5. Handler 0x661052A8, dispatch slot 0x661070C8, modOpcodes line 804.
CR8Str
(2,0x33)emittedhandler #371Conversionconfirmed_msdocs1 corpus hitsPops a value of type String, pushes the equivalent value as Double.
Stack: [..., a:Str] -> [..., a':R8]
Widening conversion; narrowing R8->R4 may lose precision and can saturate to +/-Inf.
Emitted at the boundary where a String value must be assigned to or passed as Double.
Public Sub Main()
Dim a As String, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: FC 33 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC33 CR8Str
Form2.mnuMain_Event_0 @ 0x45F55C | 45F76C FC33 CR8Str
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_33_CR8Str.
Handler: 0x661096E1, unique to this slot (real opcode #371).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As Double
b = CDbl(a)Description: draft, by claude-opus-4.7. Handler 0x661096E1, dispatch slot 0x661075E0, modOpcodes line 862.
CR8Var
(2,0x2A)emittedprimary of 3handler #65Conversionconfirmed_msdocs70 corpus hitsPops a Variant, converts it to a floating-point value on the FPU stack (ST0). Raises error 13 if the Variant cannot be converted.
Stack: [..., v:Var] -> [..., r:R8 (ST0)]
Probe evidence: s = v with s As Single emits this slot (2,2A); d = v with d As Double emits (0,42), named CR4Var. Same handler; the result goes to the FPU and the following FStFPR4 rounds it to Single. Explicit CSng(v) compiles to FnCSngVar (2,42).
Public Sub Main()
Dim a As Variant, c As Single
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 2A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC2A CR8Var
Form1.Form_Resize @ 0x474F3C | 475017 FC2A CR8Var
Form1.Form_Resize @ 0x474F3C | 4750B1 FC2A CR8Var
Form1.Form_Resize @ 0x474F3C | 475101 FC2A CR8Var
70 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_2A_CR8Var.
Handler: 0x661052C6, shared by 3 dispatch slots (real opcode #65). This is the primary slot. Other slots: (0,42) CR4Var, (2,32) CR8Var.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,42):
Dim a As Variant, c As Double : c = a - (2,2A):
Dim a As Variant, c As Single : c = a
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 70 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, s As Single
v = 5
s = v(0,0x42) CR4Var, (2,0x32) CR8Var
Description: draft, by claude-opus-5-5. Handler 0x661052C6, dispatch slot 0x661075BC, modOpcodes line 855.
CR8Var
(2,0x32)not emitteddup of (2,2A)handler #65Conversionconfirmed_handlerDispatch slot (2, 0x32) runs the same MSVBVM60 handler as (2,2A) CR8Var; runtime behaviour is identical.
Pops a Variant, converts it to a floating-point value on the FPU stack (ST0). Raises error 13 if the Variant cannot be converted.
Stack: [..., v:Var] -> [..., r:R8 (ST0)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (implicit Variant to Single) compiles to (2,2A) CR8Var instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 32 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661052C6, shared by 3 dispatch slots (real opcode #65). This is a duplicate slot of (2,2A) CR8Var. Other slots: (0,42) CR4Var, (2,2A) CR8Var.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,42):
Dim a As Variant, c As Double : c = a - (2,2A):
Dim a As Variant, c As Single : c = a
(0,0x42) CR4Var, (2,0x2A) CR8Var
Description: draft, by claude-opus-5-5. Handler 0x661052C6, dispatch slot 0x661075DC, modOpcodes line 861.
CRec2Ansi
(0,0x1F)emittedprimary of 2handler #30UDT / recordinferred_corpus6 corpus hitsPops a value of type 2Ansi, pushes the equivalent value as Rec.
Stack: [..., a:2Ansi] -> [..., a':Rec]
Emitted at the boundary where a 2Ansi value must be assigned to or passed as Rec.
Private Type TR
s As String
End Type
Private Declare Sub P Lib "x.dll" (r As Any)
Public Sub Main()
Dim r As TR
P r
End Sub
Encoding, evidence and notes
Encoding: 1F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: pool:%2
Operands:
%2(pool): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 1F 0000 CRec2Ansi pool:0x0
clsCmnDlg.OpenDialog @ 0x457B6C | 457C13 1F 1700 CRec2Ansi pool:0x17
clsCmnDlg.SaveDialog @ 0x45F270 | 45F35F 1F 1700 CRec2Ansi pool:0x17
clsCmnDlg.ColorDialog @ 0x453728 | 453799 1F 2D00 CRec2Ansi pool:0x2D
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1F_CRec2Ansi.
Handler: 0x661099AD, shared by 2 dispatch slots (real opcode #30). This is the primary slot. Other slots: (2,5E) CRecUni2Ansi.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661099AD, dispatch slot 0x66106D90, modOpcodes line 913.
CRec2Uni
(0,0x20)emittedprimary of 2handler #31UDT / recordinferred_corpus6 corpus hitsPops a value of type 2Uni, pushes the equivalent value as Rec.
Stack: [..., a:2Uni] -> [..., a':Rec]
Emitted at the boundary where a 2Uni value must be assigned to or passed as Rec.
Private Type TR
s As String
End Type
Private Declare Sub P Lib "x.dll" (r As Any)
Public Sub Main()
Dim r As TR
P r
End Sub
Encoding, evidence and notes
Encoding: 20, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: pool:%2
Operands:
%2(pool): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 20 0000 CRec2Uni pool:0x0
clsCmnDlg.OpenDialog @ 0x457B6C | 457C2B 20 1700 CRec2Uni pool:0x17
clsCmnDlg.SaveDialog @ 0x45F270 | 45F377 20 1700 CRec2Uni pool:0x17
clsCmnDlg.ColorDialog @ 0x453728 | 4537AE 20 2D00 CRec2Uni pool:0x2D
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_20_CRec2Uni.
Handler: 0x661099CA, shared by 2 dispatch slots (real opcode #31). This is the primary slot. Other slots: (2,5D) CRecAnsi2Uni.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661099CA, dispatch slot 0x66106D94, modOpcodes line 914.
CRecAnsi2Uni
(2,0x5D)not emitteddup of (0,20)handler #31UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FC 5D (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661099CA, shared by 2 dispatch slots (real opcode #31). This is a duplicate slot of (0,20) CRec2Uni. Other slots: (0,20) CRec2Uni.
Description: none. Handler 0x661099CA, dispatch slot 0x66107688, modOpcodes line 892.
CRecUni2Ansi
(2,0x5E)not emitteddup of (0,1F)handler #30UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FC 5E (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661099AD, shared by 2 dispatch slots (real opcode #30). This is a duplicate slot of (0,1F) CRec2Ansi. Other slots: (0,1F) CRec2Ansi.
Description: none. Handler 0x661099AD, dispatch slot 0x6610768C, modOpcodes line 893.
CRefVarAry
(2,0x35)emittedhandler #373Conversionconfirmed_msdocs58 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim v As Variant
Erase v
End Sub
Encoding, evidence and notes
Encoding: FC 35 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC35 CRefVarAry
Form1.AryIsEmpty @ 0x43F208 | 43F20E FC35 CRefVarAry
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE03 FC35 CRefVarAry
fso.Proc_448314 @ 0x448314 | 44834B FC35 CRefVarAry
58 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_35_CRefVarAry.
Handler: 0x66105569, unique to this slot (real opcode #373).
Corpus: 58 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105569, dispatch slot 0x661075E8, modOpcodes line 864.
CSng
(2,0x3F)not emitteddup of (2,40)handler #378Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 3F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109540, shared by 2 dispatch slots (real opcode #378). This is a duplicate slot of (2,40) CSng. Other slots: (2,40) CSng.
Description: draft, by claude-opus-4.7. Handler 0x66109540, dispatch slot 0x66107610, modOpcodes line 866.
CSng
(2,0x40)emittedprimary of 2handler #378Conversionconfirmed_handlerAlias dispatch slot (2, 0x40) for the canonical CSng at (2, 0x3F); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Date, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: FC 40 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC40 CSng
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_40_CSng.
Handler: 0x66109540, shared by 2 dispatch slots (real opcode #378). This is the primary slot. Other slots: (2,3F) CSng.
Description: draft, by claude-opus-4.7. Handler 0x66109540, dispatch slot 0x66107614, modOpcodes line 867.
CStr2Ansi
(0,0x34)emittedprimary of 2handler #51Conversionconfirmed_handler20 corpus hitsConverts the Unicode BSTR referenced on the stack into an ANSI string (WideCharToMultiByte via the runtime) held in a temporary, so the API sees a byte string.
Stack: [..., s:Str] -> [..., a:Str(ANSI)]
Emitted when a String (or fixed-length String, String array element, UDT String field) is passed to a Declared DLL function. VB converts the BSTR to an ANSI temporary before the call and back with CStr2Uni (2,58) afterwards for ByRef parameters. Not emitted for StrPtr or for typelib-declared functions taking BSTR.
Private Declare Sub P Lib "x.dll" (s As String)
Public Sub Main()
Dim s As String
P s
End Sub
Encoding, evidence and notes
Encoding: 34, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 34 CStr2Ansi
Form1.Command1_Click @ 0x444218 | 444249 34 CStr2Ansi
Form1.Command1_Click @ 0x444218 | 444253 34 CStr2Ansi
Form1.Command1_Click @ 0x444218 | 44425D 34 CStr2Ansi
20 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_34_CStr2Ansi.
Handler: 0x661055C4, shared by 2 dispatch slots (real opcode #51). This is the primary slot. Other slots: (2,5A) CStr2Ansi.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 20 occurrence(s) in PDFStreamDumper_p.exe.
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal s As String) As Long
Sub Main()
Dim s As String, n As Long
s = "abc"
n = lstrlen(s)
End SubDescription: draft, by claude-opus-5-5. Handler 0x661055C4, dispatch slot 0x66106DE4, modOpcodes line 888.
CStr2Ansi
(2,0x5A)not emitteddup of (0,34)handler #51Conversionconfirmed_msdocsDispatch slot (2, 0x5A) runs the same MSVBVM60 handler as (0,34) CStr2Ansi; runtime behaviour is identical.
Converts the Unicode BSTR referenced on the stack into an ANSI string (WideCharToMultiByte via the runtime) held in a temporary, so the API sees a byte string.
Stack: [..., s:Str] -> [..., a:Str(ANSI)]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (String to ANSI for Declare calls) compiles to (0,34) CStr2Ansi instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FC 5A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661055C4, shared by 2 dispatch slots (real opcode #51). This is a duplicate slot of (0,34) CStr2Ansi. Other slots: (0,34) CStr2Ansi.
Description: draft, by claude-opus-5-5. Handler 0x661055C4, dispatch slot 0x6610767C, modOpcodes line 879.
CStr2Uni
(2,0x58)emittedhandler #394Conversionconfirmed_msdocs14 corpus hitsConverts an ANSI string (API result or the ANSI temporary of a ByRef argument) into a Unicode BSTR.
Stack: [..., a:Str(ANSI)] -> [..., s:Str]
Emitted after calls to Declared DLL functions that take a String parameter (converting the possibly modified ANSI buffer back into the VB String) or return a String. Paired with CStr2Ansi (0,34).
Private Declare Function P Lib "x.dll" () As String
Public Sub Main()
Dim s As String
s = P()
End Sub
Encoding, evidence and notes
Encoding: FC 58 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC58 CStr2Uni
Form1.Form_Load @ 0x479DC0 | 479E8C FC58 CStr2Uni
Form1.Form_Load @ 0x479DC0 | 479F79 FC58 CStr2Uni
fso.Proc_448BF0 @ 0x448BF0 | 448C43 FC58 CStr2Uni
14 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_58_CStr2Uni.
Handler: 0x6610997A, unique to this slot (real opcode #394).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.
Private Declare Function P Lib "x.dll" () As String
Sub Main()
Dim s As String
s = P()
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610997A, dispatch slot 0x66107674, modOpcodes line 877.
CStr2Vec
(2,0x5F)emittedhandler #397Conversioninferred_corpusb() = s).Pops a String and stores its raw UTF-16 bytes as a new Byte SAFEARRAY into the temporary %a, which is then assigned to the array variable.
Emitted for b = "abc" / b = s where b is a dynamic Byte array.
Public Sub Main()
Dim b() As Byte, v As Variant, s As String
b = "abc"
End Sub
Encoding, evidence and notes
Encoding: FC 5F (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FC5F 60FF CStr2Vec var_A0
FC5F 60FF CStr2Vec var_A0
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_5F_CStr2Vec.
Handler: 0x66105590, unique to this slot (real opcode #397).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b() As Byte, v As Variant, s As String
b = "abc"
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105590, dispatch slot 0x66107690, modOpcodes line 894.
CStrAry2Ansi
(2,0x5B)emittedhandler #396Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Private Declare Sub P Lib "x.dll" (a() As String)
Public Sub Main()
Dim a() As String
P a
End Sub
Encoding, evidence and notes
Encoding: FC 5B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC5B CStrAry2Ansi
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_5B_CStrAry2Ansi.
Handler: 0x6610999C, unique to this slot (real opcode #396).
Description: draft, by claude-opus-4.7. Handler 0x6610999C, dispatch slot 0x66107680, modOpcodes line 880.
CStrAry2Uni
(2,0x59)emittedhandler #395Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Private Declare Sub P Lib "x.dll" (a() As String)
Public Sub Main()
Dim a() As String
P a
End Sub
Encoding, evidence and notes
Encoding: FC 59 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC59 CStrAry2Uni
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_59_CStrAry2Uni.
Handler: 0x6610998B, unique to this slot (real opcode #395).
Description: draft, by claude-opus-4.7. Handler 0x6610998B, dispatch slot 0x66107678, modOpcodes line 878.
CStrBool
(4,0xC7)emittedhandler #685Conversionconfirmed_msdocsPops a value of type Boolean, pushes the equivalent value as String.
Stack: [..., a:Bool] -> [..., a':Str]
Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).
Emitted at the boundary where a Boolean value must be assigned to or passed as String.
Public Sub Main()
Dim a As Boolean, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FE C7 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEC7 CStrBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C7_CStrBool.
Handler: 0x66109639, unique to this slot (real opcode #685).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Boolean, b As String
b = CStr(a)Description: draft, by claude-opus-4.7. Handler 0x66109639, dispatch slot 0x66108030, modOpcodes line 881.
CStrCy
(2,0x01)emittedhandler #357Conversionconfirmed_msdocsPops a value of type Currency, pushes the equivalent value as String.
Stack: [..., a:Cy] -> [..., a':Str]
Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).
Emitted at the boundary where a Currency value must be assigned to or passed as String.
Public Sub Main()
Dim a As Currency, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FC 01 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC01 CStrCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_01_CStrCy.
Handler: 0x6610968F, unique to this slot (real opcode #357).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As String
b = CStr(a)Description: draft, by claude-opus-4.7. Handler 0x6610968F, dispatch slot 0x66107518, modOpcodes line 815.
CStrDate
(4,0xC8)emittedhandler #686Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Date, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FE C8 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEC8 CStrDate
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C8_CStrDate.
Handler: 0x6610966D, unique to this slot (real opcode #686).
Description: draft, by claude-opus-4.7. Handler 0x6610966D, dispatch slot 0x66108034, modOpcodes line 883.
CStrI2
(1,0xFC)emitteddup of (1,FD)handler #353Conversionconfirmed_msdocsPops a Byte (widened on the stack) and pushes its decimal string representation as a new BSTR.
Stack: [..., a:UI1] -> [..., s:Str]
Probe evidence: CStr(<Byte>), Byte & String and implicit Byte-to-String assignment emit this slot; CStr(<Integer>) emits (1,FD). The names of (1,FC) and (1,FD) appear swapped. Both slots run the same handler.
Public Sub Main()
Dim a As Byte, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FB FC (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFC CStrI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FC_CStrI2.
Handler: 0x66105378, shared by 2 dispatch slots (real opcode #353). This is a duplicate slot of (1,FD) CStrUI1. Other slots: (1,FD) CStrUI1.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,FC):
Dim a As Byte, c As String : c = CStr(a) - (1,FD):
Dim a As Integer, c As String : c = CStr(a)
Finding: Probe: CStr(<Byte>) emits this slot, not CStr(<Integer>). The modOpcodes name CStrI2 appears swapped with (1,FD). Both slots share one handler, so the difference is compile-time only.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim b As Byte, s As String
b = 7
s = CStr(b)Description: draft, by claude-opus-5-5. Handler 0x66105378, dispatch slot 0x66107504, modOpcodes line 810.
CStrI4
(1,0xFE)emittedhandler #354Conversionconfirmed_msdocs84 corpus hitsPops a value of type Long, pushes the equivalent value as String.
Stack: [..., a:I4] -> [..., a':Str]
Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).
Emitted at the boundary where a Long value must be assigned to or passed as String.
Public Sub Main()
Dim a As Long, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FB FE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFE CStrI4
Form1.RegisterPlugin @ 0x44CB20 | 44CBC1 FBFE CStrI4
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DB4E FBFE CStrI4
Form1.mnuHideDups_Click @ 0x4629E4 | 462C19 FBFE CStrI4
84 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FE_CStrI4.
Handler: 0x6610538A, unique to this slot (real opcode #354).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 84 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As String
b = CStr(a)Description: draft, by claude-opus-4.7. Handler 0x6610538A, dispatch slot 0x6610750C, modOpcodes line 812.
CStrR4
(1,0xFF)emittedhandler #355Conversionconfirmed_msdocsPops a value of type Single, pushes the equivalent value as String.
Stack: [..., a:R4] -> [..., a':Str]
Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).
Emitted at the boundary where a Single value must be assigned to or passed as String.
Public Sub Main()
Dim a As Single, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FB FF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFF CStrR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FF_CStrR4.
Handler: 0x6610539C, unique to this slot (real opcode #355).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, b As String
b = CStr(a)Description: draft, by claude-opus-4.7. Handler 0x6610539C, dispatch slot 0x66107510, modOpcodes line 813.
CStrR8
(2,0x00)emittedhandler #356Conversionconfirmed_msdocs4 corpus hitsPops a value of type Double, pushes the equivalent value as String.
Stack: [..., a:R8] -> [..., a':Str]
Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).
Emitted at the boundary where a Double value must be assigned to or passed as String.
Public Sub Main()
Dim a As Double, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FC 00 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC00 CStrR8
Form1.cmdDecode_Click @ 0x4775C0 | 477EE9 FC00 CStrR8
CPdfParser.ParseFile @ 0x471F38 | 472540 FC00 CStrR8
CPdfParser.Orginal_ParseFile @ 0x468D2C | 46908D FC00 CStrR8
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_00_CStrR8.
Handler: 0x6610964B, unique to this slot (real opcode #356).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As String
b = CStr(a)Description: draft, by claude-opus-4.7. Handler 0x6610964B, dispatch slot 0x66107514, modOpcodes line 814.
CStrUI1
(1,0xFD)emittedprimary of 2handler #353Conversionconfirmed_msdocs8 corpus hitsPops a 16-bit Integer and pushes its decimal string representation as a new BSTR.
Stack: [..., a:I2] -> [..., s:Str]
Probe evidence: CStr(<Integer>), Integer & String and implicit Integer-to-String assignment emit this slot; CStr(<Byte>) emits (1,FC). The names appear swapped. Same handler as (1,FC).
Public Sub Main()
Dim a As Integer, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FB FD (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFD CStrUI1
Form1.RegisterPlugin @ 0x44CB20 | 44CBD0 FBFD CStrUI1
CApplyFilters.ParsePredictor @ 0x45CED4 | 45D03E FBFD CStrUI1
CApplyFilters.ParsePredictor @ 0x45CED4 | 45D054 FBFD CStrUI1
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FD_CStrUI1.
Handler: 0x66105378, shared by 2 dispatch slots (real opcode #353). This is the primary slot. Other slots: (1,FC) CStrI2.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,FC):
Dim a As Byte, c As String : c = CStr(a) - (1,FD):
Dim a As Integer, c As String : c = CStr(a)
Finding: Probe: CStr(<Integer>) (and Boolean-to-String paths) emit this slot, not CStr(<Byte>). The name CStrUI1 appears swapped with (1,FC). Same handler as (1,FC).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Integer, s As String
i = 300
s = CStr(i)Description: draft, by claude-opus-5-5. Handler 0x66105378, dispatch slot 0x66107508, modOpcodes line 811.
CStrVar
(2,0x02)emittedhandler #358Conversionconfirmed_msdocs33 corpus hitsPops a value of type Variant, pushes the equivalent value as String.
Stack: [..., a:Var] -> [..., a':Str]
Number-to-string formatting uses the locale-default decimal separator (matches VBA CStr).
Emitted when a Variant is used where a String is required without an explicit conversion function: x = v with x As String, a Variant passed to a ByVal String parameter, or a late-bound property result stored into a String. The explicit C...(v) function compiles to FnCStrVar (2,4B) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.
Public Sub Main()
Dim a As Variant, c As String
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 02 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC02 CStrVar
Form1.safe @ 0x44D7B8 | 44D8B5 FC02 CStrVar
fso.Proc_44160C @ 0x44160C | 441621 FC02 CStrVar
fso.Proc_449624 @ 0x449624 | 4496E2 FC02 CStrVar
33 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_02_CStrVar.
Handler: 0x6610531F, unique to this slot (real opcode #358).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 33 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, x As String
v = 5
x = vDescription: draft, by claude-opus-5-5. Handler 0x6610531F, dispatch slot 0x6610751C, modOpcodes line 816.
CStrVarTmp
(0,0x60)emittedprimary of 2handler #93Conversionconfirmed_msdocs291 corpus hitsPops the address of a temporary Variant, converts it to a BSTR (error 13 if impossible), clears the temporary and pushes the String.
Stack: [..., t:Var(tmp)] -> [..., s:Str]
Emitted when a Variant-valued expression result (a Variant-returning function such as Mid()/Left()/Input(), or a late-bound property) is stored into a String. The temporary Variant is consumed and freed. A Variant variable assigned to a String uses CStrVar (2,02).
Public Sub Main()
Dim s As Variant, r As String
r = Len(s)
End Sub
Encoding, evidence and notes
Encoding: 60, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 60 CStrVarTmp
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D590 60 CStrVarTmp
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DAA1 60 CStrVarTmp
Form1.mnuExtractURI_Click @ 0x45774C | 457876 60 CStrVarTmp
291 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_60_CStrVarTmp.
Handler: 0x66105331, shared by 2 dispatch slots (real opcode #93). This is the primary slot. Other slots: (3,FD) CStrVarTmp.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 291 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, s As String
v = "abc"
s = Mid(v, 2)Description: draft, by claude-opus-5-5. Handler 0x66105331, dispatch slot 0x66106E94, modOpcodes line 794.
CStrVarTmp
(3,0xFD)not emitteddup of (0,60)handler #93Conversionconfirmed_handlerDispatch slot (3, 0xFD) runs the same MSVBVM60 handler as (0,60) CStrVarTmp; runtime behaviour is identical.
Pops the address of a temporary Variant, converts it to a BSTR (error 13 if impossible), clears the temporary and pushes the String.
Stack: [..., t:Var(tmp)] -> [..., s:Str]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Variant temporary to String) compiles to (0,60) CStrVarTmp instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FD FD (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105331, shared by 2 dispatch slots (real opcode #93). This is a duplicate slot of (0,60) CStrVarTmp. Other slots: (0,60) CStrVarTmp.
Description: draft, by claude-opus-5-5. Handler 0x66105331, dispatch slot 0x66107D08, modOpcodes line 882.
CStrVarVal
(3,0xFE)emittedhandler #593Conversioninferred_corpus376 corpus hitsReads the Variant referenced on the stack, converts a copy to a BSTR in the temporary %a, and pushes the String. The source Variant is unchanged.
Stack: [..., v:Rf] -> [..., s:Str]
Emitted when a Variant variable is passed where the callee takes a String by value: VB string functions with a String parameter (Asc(v), Trim$(v), Val(v), Left$(v, n), ...) and Declare'd APIs with ByVal s As String. The %a operand is the temporary String slot, freed after the call.
Public Sub Main()
Dim a As Variant, c As Variant
c = Asc(a)
End Sub
Encoding, evidence and notes
Encoding: FD FE (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDFE 58FF CStrVarVal var_A8
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467DF3 FDFE D4FE CStrVarVal var_12C
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E1D FDFE D4FE CStrVarVal var_12C
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E47 FDFE D4FE CStrVarVal var_12C
376 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FE_CStrVarVal.
Handler: 0x66105357, unique to this slot (real opcode #593).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 376 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, n As Integer
v = "abc"
n = Asc(v)Description: draft, by claude-opus-5-5. Handler 0x66105357, dispatch slot 0x66107D0C, modOpcodes line 915.
CUI1Bool
(2,0x38)emittedhandler #374Conversionconfirmed_msdocsPops a value of type Boolean, pushes the equivalent value as Byte.
Stack: [..., a:Bool] -> [..., a':UI1]
Emitted at the boundary where a Boolean value must be assigned to or passed as Byte.
Public Sub Main()
Dim a As Boolean, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 38 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC38 CUI1Bool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_38_CUI1Bool.
Handler: 0x661094DF, unique to this slot (real opcode #374).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Boolean, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x661094DF, dispatch slot 0x661075F4, modOpcodes line 865.
CUI1Cy
(2,0x11)emittedhandler #364Conversionconfirmed_msdocsPops a value of type Currency, pushes the equivalent value as Byte.
Stack: [..., a:Cy] -> [..., a':UI1]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Currency value must be assigned to or passed as Byte.
Public Sub Main()
Dim a As Currency, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 11 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC11 CUI1Cy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_11_CUI1Cy.
Handler: 0x661094A5, unique to this slot (real opcode #364).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x661094A5, dispatch slot 0x66107558, modOpcodes line 828.
CUI1I2
(2,0x0D)emittedhandler #361Conversionconfirmed_msdocs35 corpus hitsPops a value of type Integer, pushes the equivalent value as Byte.
Stack: [..., a:I2] -> [..., a':UI1]
Emitted at the boundary where a Integer value must be assigned to or passed as Byte.
Public Sub Main()
Dim c As Variant
c = CByte(5)
End Sub
Encoding, evidence and notes
Encoding: FC 0D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0D CUI1I2
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBA2 FC0D CUI1I2
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F000 FC0D CUI1I2
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465767 FC0D CUI1I2
35 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0D_CUI1I2.
Handler: 0x66109475, unique to this slot (real opcode #361).
Finding: Probe: emitted when an Integer-valued expression or literal is stored to a Byte (e.g. b = 7), as well as CByte(<Integer>).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 35 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x66109475, dispatch slot 0x66107548, modOpcodes line 824.
CUI1I4
(2,0x0E)emittedhandler #362Conversionconfirmed_msdocs3 corpus hitsPops a value of type Long, pushes the equivalent value as Byte.
Stack: [..., a:I4] -> [..., a':UI1]
Emitted at the boundary where a Long value must be assigned to or passed as Byte.
Public Sub Main()
Dim a As Long, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 0E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0E CUI1I4
modEscapes.Proc_460438 @ 0x460438 | 46050F FC0E CUI1I4
modEscapes.Proc_460438 @ 0x460438 | 460608 FC0E CUI1I4
modEscapes.Proc_448CF0 @ 0x448CF0 | 448D60 FC0E CUI1I4
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0E_CUI1I4.
Handler: 0x6610948C, unique to this slot (real opcode #362).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x6610948C, dispatch slot 0x6610754C, modOpcodes line 825.
CUI1R4
(2,0x0F)emittedprimary of 2handler #363Conversionconfirmed_msdocsPops a value of type Single, pushes the equivalent value as Byte.
Stack: [..., a:R4] -> [..., a':UI1]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Single value must be assigned to or passed as Byte.
Public Sub Main()
Dim a As Single, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 0F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC0F CUI1R4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_0F_CUI1R4.
Handler: 0x661094B1, shared by 2 dispatch slots (real opcode #363). This is the primary slot. Other slots: (2,10) CUI1R4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,0F):
Dim a As Single, c As Byte : c = CByte(a) - (2,10):
Dim a As Double, c As Byte : c = CByte(a)
Finding: Compiler selects this slot for CByte(<Single>). (2,10) is used for Double.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x661094B1, dispatch slot 0x66107550, modOpcodes line 826.
CUI1R4
(2,0x10)emitteddup of (2,0F)handler #363Conversionconfirmed_handlerAlias dispatch slot (2, 0x10) for the canonical CUI1R4 at (2, 0x0F); semantics are identical.
Pops a value of type Single, pushes the equivalent value as Byte.
Stack: [..., a:R4] -> [..., a':UI1]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a Single value must be assigned to or passed as Byte.
Public Sub Main()
Dim a As Double, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 10 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC10 CUI1R4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_10_CUI1R4.
Handler: 0x661094B1, shared by 2 dispatch slots (real opcode #363). This is a duplicate slot of (2,0F) CUI1R4. Other slots: (2,0F) CUI1R4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,0F):
Dim a As Single, c As Byte : c = CByte(a) - (2,10):
Dim a As Double, c As Byte : c = CByte(a)
Finding: Compiler selects this slot for CByte(<Double>), and for Double-valued expressions assigned to Byte. Effective meaning: CUI1R8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (2,0F) CUI1R4 (same handler, different slot)
Dim a As Single, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x661094B1, dispatch slot 0x66107554, modOpcodes line 827.
CUI1Str
(2,0x13)emittedhandler #366Conversionconfirmed_msdocsPops a value of type String, pushes the equivalent value as Byte.
Stack: [..., a:Str] -> [..., a':UI1]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted at the boundary where a String value must be assigned to or passed as Byte.
Public Sub Main()
Dim a As String, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 13 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC13 CUI1Str
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_13_CUI1Str.
Handler: 0x661096AE, unique to this slot (real opcode #366).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As Byte
b = CByte(a)Description: draft, by claude-opus-4.7. Handler 0x661096AE, dispatch slot 0x66107560, modOpcodes line 830.
CUI1Var
(2,0x12)emittedhandler #365Conversionconfirmed_msdocs4 corpus hitsPops a value of type Variant, pushes the equivalent value as Byte.
Stack: [..., a:Var] -> [..., a':UI1]
Numeric conversion uses VB6 banker's rounding (round-half-to-even) for fractional sources; out-of-range raises run-time error 6 (Overflow).
Emitted when a Variant is used where a Byte is required without an explicit conversion function: x = v with x As Byte, a Variant passed to a ByVal Byte parameter, or a late-bound property result stored into a Byte. The explicit C...(v) function compiles to FnCByteVar (2,44) instead. Raises error 13 (Type mismatch) if the Variant cannot be converted.
Public Sub Main()
Dim a As Variant, c As Byte
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 12 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC12 CUI1Var
b64.Proc_478E48 @ 0x478E48 | 479C5F FC12 CUI1Var
b64.Proc_478E48 @ 0x478E48 | 479C8F FC12 CUI1Var
b64.Proc_478E48 @ 0x478E48 | 479CC5 FC12 CUI1Var
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_12_CUI1Var.
Handler: 0x661094F0, unique to this slot (real opcode #365).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, x As Byte
v = 5
x = vDescription: draft, by claude-opus-5-5. Handler 0x661094F0, dispatch slot 0x6610755C, modOpcodes line 829.
CUnkVar
(2,0x71)emittedhandler #405Conversionconfirmed_msdocs2 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long, o As Object
If v Is Nothing Then n = 1
End Sub
Function F() As Variant
End Function
Encoding, evidence and notes
Encoding: FC 71 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC71 CUnkVar
CScriptFunctions.ObjectPointer @ 0x440CC4 | 440CD5 FC71 CUnkVar
frmBruteZLib.mnuSaveToFile_Click @ 0x4520F0 | 45210A FC71 CUnkVar
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_71_CUnkVar.
Handler: 0x66105549, unique to this slot (real opcode #405).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105549, dispatch slot 0x661076D8, modOpcodes line 889.
CVar2Vec
(2,0x60)emittedhandler #398Conversioninferred_corpus48 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim b() As Byte, s As String
b = StrConv(s, vbFromUnicode)
End Sub
Encoding, evidence and notes
Encoding: FC 60 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FC60 50FF CVar2Vec var_B0
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461538 FC60 D0FE CVar2Vec var_130
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461578 FC60 D0FE CVar2Vec var_130
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA53 FC60 C0FE CVar2Vec var_140
48 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_60_CVar2Vec.
Handler: 0x661055AA, unique to this slot (real opcode #398).
Corpus: 48 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661055AA, dispatch slot 0x66107694, modOpcodes line 895.
CVarAd
(3,0x6F)emittedhandler #534Conversioninferred_corpus81 corpus hitsPops an object pointer, AddRefs it and writes a VT_DISPATCH Variant into the temporary %a, then pushes the temporary's address.
Stack: [..., o:Ad] -> [..., v:Var]
Emitted when an object must be passed as a Variant: Set o.Prop = x on a late-bound object, an object passed to a ByVal/expression Variant argument, and Set v(i) = x on Variant-held arrays.
Public Sub Main()
Dim o As Object
Set o.Prop = Nothing
End Sub
Encoding, evidence and notes
Encoding: FD 6F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD6F 68FF CVarAd var_98
Form1.LoadPlugins @ 0x4644FC | 464784 FD6F 44FF CVarAd var_BC
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CA16 FD6F 68FF CVarAd var_98
Form1.mnuUnescape_Click @ 0x45DEC4 | 45E0F8 FD6F 1CFF CVarAd var_E4
81 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_6F_CVarAd.
Handler: 0x66105452, unique to this slot (real opcode #534).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 81 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As Object, c As Collection
Set c = New Collection
Set o.Prop = cDescription: draft, by claude-opus-5-5. Handler 0x66105452, dispatch slot 0x66107AD0, modOpcodes line 904.
CVarAryUdt
(5,0x3A)emittedhandler #766UDT / recordinferred_corpusv = a), descriptor-driven.Pops an array reference and produces a Variant holding a copy of the array (VT_ARRAY|vt). The 6 operand bytes carry the temporary slot and the element VARTYPE/flags (observed 58FF 0920 0000: var_A8, VT_DISPATCH|VT_ARRAY for an Object array).
Emitted for v = a where a is an array of objects or records.
Public Sub Main()
Dim a() As Object, v As Variant
v = a
End Sub
Encoding, evidence and notes
Encoding: FF 3A (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF3A 58FF09200000 CVarAryUdt
FF3A 58FF09200000 CVarAryUdt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3A_CVarAryUdt.
Handler: 0x66109839, unique to this slot (real opcode #766).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a() As Object, v As Variant
v = a
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109839, dispatch slot 0x661081FC, modOpcodes line 924.
CVarAryVarg
(3,0xFC)not emittedhandler #592Conversioninferred_corpusEncoding, evidence and notes
Encoding: FD FC (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610991E, unique to this slot (real opcode #592).
Description: none. Handler 0x6610991E, dispatch slot 0x66107D04, modOpcodes line 910.
CVarBoolI2
(3,0xF8)emittedhandler #588Conversioninferred_corpus62 corpus hitsPops a value of type Integer, pushes the equivalent value as VarBool.
Stack: [..., a:I2] -> [..., a':VarBool]
Emitted at the boundary where a Integer value must be assigned to or passed as VarBool.
Public Sub Main()
Dim a As Boolean, c As Variant
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FD F8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDF8 58FF CVarBoolI2 var_A8
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474217 FDF8 14FF CVarBoolI2 var_EC
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4744EA FDF8 14FF CVarBoolI2 var_EC
Form1.Form_Unload (Cancel As Integer) @ 0x46B420 | 46B4C3 FDF8 44FF CVarBoolI2 var_BC
62 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F8_CVarBoolI2.
Handler: 0x66105423, unique to this slot (real opcode #588).
Corpus: 62 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105423, dispatch slot 0x66107CF4, modOpcodes line 906.
CVarCy
(0,0x3F)emittedprimary of 2handler #62Conversionconfirmed_handlerPops a Currency and writes a VT_CY Variant into the temporary %a, then pushes the temporary's address.
Stack: [..., c:Cy] -> [..., v:Var]
Emitted for v = c with c As Currency. (3,6C) is the other slot of this name; the compiler emits this one, (0,3F).
Public Sub Main()
Dim c As Currency, v As Variant
v = c
End Sub
Encoding, evidence and notes
Encoding: 3F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 3F 54FF CVarCy var_AC
3F 54FF CVarCy var_AC
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3F_CVarCy.
Handler: 0x661097EB, shared by 2 dispatch slots (real opcode #62). This is the primary slot. Other slots: (3,6C) CVarCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Currency, v As Variant
v = c
End SubDescription: draft, by claude-opus-5-5. Handler 0x661097EB, dispatch slot 0x66106E10, modOpcodes line 911.
CVarCy
(3,0x6C)not emitteddup of (0,3F)handler #62Conversioninferred_corpusEncoding, evidence and notes
Encoding: FD 6C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661097EB, shared by 2 dispatch slots (real opcode #62). This is a duplicate slot of (0,3F) CVarCy. Other slots: (0,3F) CVarCy.
Description: none. Handler 0x661097EB, dispatch slot 0x66107AC4, modOpcodes line 902.
CVarDate
(3,0xFB)emittedhandler #591Conversioninferred_corpusPops an 8-byte Date and writes a VT_DATE Variant into the temporary %a.
Stack: [..., d:Date] -> [..., v:Var]
Emitted for v = d with d As Date.
Public Sub Main()
Dim d As Date, v As Variant
v = d
End Sub
Encoding, evidence and notes
Encoding: FD FB (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDFB 54FF CVarDate var_AC
FDFB 54FF CVarDate var_AC
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FB_CVarDate.
Handler: 0x661097C6, unique to this slot (real opcode #591).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim d As Date, v As Variant
v = d
End SubDescription: draft, by claude-opus-5-5. Handler 0x661097C6, dispatch slot 0x66107D00, modOpcodes line 909.
CVarDateVar
(3,0xF9)not emittedhandler #589Conversioninferred_corpusEncoding, evidence and notes
Encoding: FD F9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661097D0, unique to this slot (real opcode #589).
Description: none. Handler 0x661097D0, dispatch slot 0x66107CF8, modOpcodes line 907.
CVarErrI4
(3,0xFA)emittedhandler #590Conversioninferred_corpusCVErr).Pops a Long error code and writes a VT_ERROR Variant into the temporary %a.
Stack: [..., n:I4] -> [..., v:Var]
Emitted for CVErr(n).
Public Sub Main()
Dim v As Variant
v = CVErr(5)
End Sub
Encoding, evidence and notes
Encoding: FD FA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDFA 5CFF CVarErrI4 var_A4
FDFA 5CFF CVarErrI4 var_A4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FA_CVarErrI4.
Handler: 0x66109794, unique to this slot (real opcode #590).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant
v = CVErr(5)
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109794, dispatch slot 0x66107CFC, modOpcodes line 908.
CVarI2
(0,0x44)emittedprimary of 2handler #67Conversionconfirmed_handler16 corpus hitsAlias dispatch slot (0, 0x44) for the canonical CVarI2 at (3, 0x68); semantics are identical.
Pops a value of type Integer, pushes the equivalent value as Variant.
Stack: [..., a:I2] -> [..., a':Var]
Source value is boxed into a Variant of the matching subtype.
Emitted at the boundary where a Integer value must be assigned to or passed as Variant.
Public Sub Main()
Dim a As Boolean, c As Variant
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: 44, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 44 58FF CVarI2 var_A8
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C451 44 5CFF CVarI2 var_A4
Form1.Form_Load @ 0x479DC0 | 47A413 44 54FF CVarI2 var_AC
fso.Proc_44A0B4 @ 0x44A0B4 | 44A104 44 54FF CVarI2 var_AC
16 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_44_CVarI2.
Handler: 0x66105431, shared by 2 dispatch slots (real opcode #67). This is the primary slot. Other slots: (3,68) CVarI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Variant
b = CVar(a)Description: draft, by claude-opus-4.7. Handler 0x66105431, dispatch slot 0x66106E24, modOpcodes line 912.
CVarI2
(3,0x68)not emitteddup of (0,44)handler #67Conversioninferred_corpusEncoding, evidence and notes
Encoding: FD 68 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105431, shared by 2 dispatch slots (real opcode #67). This is a duplicate slot of (0,44) CVarI2. Other slots: (0,44) CVarI2.
Description: none. Handler 0x66105431, dispatch slot 0x66107AB4, modOpcodes line 898.
CVarI4
(3,0x69)emittedhandler #531Conversioninferred_corpus269 corpus hitsPops a value of type Long, pushes the equivalent value as Variant.
Stack: [..., a:I4] -> [..., a':Var]
Source value is boxed into a Variant of the matching subtype.
Emitted at the boundary where a Long value must be assigned to or passed as Variant.
Public Sub Main()
Dim a As Long, c As Variant
c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding: FD 69 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD69 58FF CVarI4 var_A8
Form1.mnub64decode_Click @ 0x451280 | 45134F FD69 2CFF CVarI4 var_D4
Form1.mnub64Encode_Click @ 0x4510EC | 4511BB FD69 2CFF CVarI4 var_D4
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA85 FD69 68FF CVarI4 var_98
269 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_69_CVarI4.
Handler: 0x66105478, unique to this slot (real opcode #531).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 269 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Variant
b = CVar(a)Description: draft, by claude-opus-4.7. Handler 0x66105478, dispatch slot 0x66107AB8, modOpcodes line 899.
CVarR4
(3,0x6A)emittedhandler #532Conversioninferred_corpus83 corpus hitsPops a value of type Single, pushes the equivalent value as Variant.
Stack: [..., a:R4] -> [..., a':Var]
Source value is boxed into a Variant of the matching subtype.
Emitted at the boundary where a Single value must be assigned to or passed as Variant.
Public Sub Main()
Dim a As Single, c As Variant
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: FD 6A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD6A 58FF CVarR4 var_A8
Form1.cmdAbortProcessing_Click @ 0x441954 | 441991 FD6A 68FF CVarR4 var_98
Form1.Form_Resize @ 0x474F3C | 4750B4 FD6A 44FF CVarR4 var_BC
Form1.Form_Resize @ 0x474F3C | 47510C FD6A 44FF CVarR4 var_BC
83 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_6A_CVarR4.
Handler: 0x6610547E, unique to this slot (real opcode #532).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 83 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Single, b As Variant
b = CVar(a)Description: draft, by claude-opus-4.7. Handler 0x6610547E, dispatch slot 0x66107ABC, modOpcodes line 900.
CVarR8
(3,0x6B)emittedhandler #533Conversioninferred_corpus3 corpus hitsPops a value of type Double, pushes the equivalent value as Variant.
Stack: [..., a:R8] -> [..., a':Var]
Source value is boxed into a Variant of the matching subtype.
Emitted at the boundary where a Double value must be assigned to or passed as Variant.
Public Sub Main()
Dim a As Double, c As Variant
c = CVar(a)
End Sub
Encoding, evidence and notes
Encoding: FD 6B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD6B 54FF CVarR8 var_AC
modZLIB.Proc_4666C0 @ 0x4666C0 | 466947 FD6B E4FE CVarR8 var_11C
CPDFStream.GetDetailsReport @ 0x47468C | 474C21 FD6B 00FF CVarR8 var_100
frmScTest.Command1_Click @ 0x46F7C0 | 46FD6B FD6B 40FF CVarR8 var_C0
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_6B_CVarR8.
Handler: 0x661054A5, unique to this slot (real opcode #533).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Variant
b = CVar(a)Description: draft, by claude-opus-4.7. Handler 0x661054A5, dispatch slot 0x66107AC0, modOpcodes line 901.
CVarRef
(0,0x4D)emittedprimary of 2handler #76Conversioninferred_corpus544 corpus hitsPops the variable's address and writes a Variant of type %r | VT_BYREF pointing at it into temporary %a, then pushes the temporary's address. Writes through the parameter therefore reach the original typed variable.
Stack: [..., &x:Rf] -> [..., &v:Var]
Emitted when a non-Variant variable is passed to a ByRef Variant parameter: user procedures Sub P(x As Variant), ParamArray arguments, and runtime functions taking Variant (IsNumeric(n), Format$(n), TypeName(o), ...). %a is the temporary Variant, and %r is the VARTYPE OR'ed with VT_BYREF (0x4000).
Public Sub Main()
Dim o As Object
P o
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: 4D, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %r
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
Observed: 4D 68FF0940 CVarRef var_98 0x4009 (IDisp | ByRef)
Form1.LoadPlugins @ 0x4644FC | 4645E5 4D 44FF0860 CVarRef var_BC 0x6008 (Bstr | Ary | ByRef)
Form1.LoadPlugins @ 0x4644FC | 464651 4D 44FF0840 CVarRef var_BC 0x4008 (Bstr | ByRef)
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3EF 4D 54FF0840 CVarRef var_AC 0x4008 (Bstr | ByRef)
544 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4D_CVarRef.
Handler: 0x661054E3, shared by 2 dispatch slots (real opcode #76). This is the primary slot. Other slots: (3,94) CVarRef.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 544 occurrence(s) in PDFStreamDumper_p.exe.
Sub P(x As Variant)
End Sub
Sub Main()
Dim n As Long
P n
End SubDescription: draft, by claude-opus-5-5. Handler 0x661054E3, dispatch slot 0x66106E48, modOpcodes line 918.
CVarRef
(3,0x94)not emitteddup of (0,4D)handler #76Conversionconfirmed_handlerEncoding, evidence and notes
Encoding: FD 94 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %r
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661054E3, shared by 2 dispatch slots (real opcode #76). This is a duplicate slot of (0,4D) CVarRef. Other slots: (0,4D) CVarRef.
Description: none. Handler 0x661054E3, dispatch slot 0x66107B64, modOpcodes line 919.
CVarRefUdt
(5,0x33)emittedhandler #760UDT / recordinferred_corpusVariant parameter (VT_RECORD|VT_BYREF).Wraps the UDT's address in a by-reference VT_RECORD Variant in the temporary given by the first operand.
Operands (4 bytes): temporary slot, record-type index.
Emitted for P r where Sub P(x As Variant) and r is a typelib/public UDT.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim v As Variant, r As TPubRec
P r
End Sub
Sub P(x As Variant)
End Sub
Sub Q(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 33 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF33 48FF0000 CVarRefUdt
FF33 48FF0000 CVarRefUdt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_33_CVarRefUdt.
Handler: 0x66109879, unique to this slot (real opcode #760).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim v As Variant, r As TPubRec
P r
End Sub
Sub P(x As Variant)
End Sub
Sub Q(x As Variant)
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109879, dispatch slot 0x661081E0, modOpcodes line 921.
CVarStr
(0,0x46)emittedprimary of 2handler #69Conversioninferred_corpus649 corpus hitsPops a value of type String, pushes the equivalent value as Variant.
Stack: [..., a:Str] -> [..., a':Var]
Source value is boxed into a Variant of the matching subtype.
Emitted at the boundary where a String value must be assigned to or passed as Variant.
Public Sub Main()
Dim c As Variant
c = vbNullString
End Sub
Encoding, evidence and notes
Encoding: 46, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 46 5CFF CVarStr var_A4
Form1.LoadPlugins @ 0x4644FC | 464525 46 54FF CVarStr var_AC
Form1.LoadPlugins @ 0x4644FC | 4645C0 46 54FF CVarStr var_AC
Form1.LoadPlugins @ 0x4644FC | 4646CF 46 54FF CVarStr var_AC
649 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_46_CVarStr.
Handler: 0x66105472, shared by 2 dispatch slots (real opcode #69). This is the primary slot. Other slots: (3,6E) CVarStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 649 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As Variant
b = CVar(a)Description: draft, by claude-opus-4.7. Handler 0x66105472, dispatch slot 0x66106E2C, modOpcodes line 891.
CVarStr
(3,0x6E)not emitteddup of (0,46)handler #69Conversionconfirmed_handlerEncoding, evidence and notes
Encoding: FD 6E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105472, shared by 2 dispatch slots (real opcode #69). This is a duplicate slot of (0,46) CVarStr. Other slots: (0,46) CVarStr.
Description: none. Handler 0x66105472, dispatch slot 0x66107ACC, modOpcodes line 903.
CVarUI1
(3,0x67)emittedhandler #530Conversioninferred_corpus1 corpus hitsPops a value of type Byte, pushes the equivalent value as Variant.
Stack: [..., a:UI1] -> [..., a':Var]
Source value is boxed into a Variant of the matching subtype.
Emitted at the boundary where a Byte value must be assigned to or passed as Variant.
Public Sub Main()
Dim c As Variant
c = CByte(5)
End Sub
Encoding, evidence and notes
Encoding: FD 67 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD67 5CFF CVarUI1 var_A4
fso.Proc_467FC4 @ 0x467FC4 | 4680B3 FD67 44FF CVarUI1 var_BC
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_67_CVarUI1.
Handler: 0x6610978B, unique to this slot (real opcode #530).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Byte, b As Variant
b = CVar(a)Description: draft, by claude-opus-4.7. Handler 0x6610978B, dispatch slot 0x66107AB0, modOpcodes line 897.
CVarUdt
(5,0x34)emittedhandler #761UDT / recordinferred_corpusPops a UDT address and produces a Variant that owns a copy of the record.
Operands (4 bytes): temporary slot, record-type index.
Emitted for v = r where r is a typelib/public UDT.
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec
Public Sub Main()
Dim v As Variant
v = gr
End Sub
Encoding, evidence and notes
Encoding: FF 34 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF34 5CFF0000 CVarUdt
FF34 5CFF0000 CVarUdt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_34_CVarUdt.
Handler: 0x6610980B, unique to this slot (real opcode #761).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec
Public Sub Main()
Dim v As Variant
v = gr
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610980B, dispatch slot 0x661081E4, modOpcodes line 922.
CVarUnk
(2,0x72)emittedhandler #406Conversioninferred_corpusPops an IUnknown pointer, AddRefs it and writes a VT_UNKNOWN Variant into the temporary %a.
Stack: [..., u:Ad] -> [..., v:Var]
Emitted for v = u (without Set) where u As IUnknown.
Public Sub Main()
Dim u As IUnknown, v As Variant
v = u
End Sub
Encoding, evidence and notes
Encoding: FC 72 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FC72 58FF CVarUnk var_A8
FC72 58FF CVarUnk var_A8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_72_CVarUnk.
Handler: 0x661097BD, unique to this slot (real opcode #406).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim u As IUnknown, v As Variant
v = u
End SubDescription: draft, by claude-opus-5-5. Handler 0x661097BD, dispatch slot 0x661076DC, modOpcodes line 896.
CVec2Var
(2,0x61)not emittedhandler #399Conversioninferred_corpusEncoding, evidence and notes
Encoding: FC 61 (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109942, unique to this slot (real opcode #399).
Description: none. Handler 0x66109942, dispatch slot 0x66107698, modOpcodes line 917.
CastAd
(0,0x3D)emittedprimary of 2handler #60Object / COMinferred_corpus79 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim c As Collection
Set c = Nothing
End Sub
Encoding, evidence and notes
Encoding: 3D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %G
Operands:
%G: guid_extract, 2 byte(s). 16-bit constant-pool index of a GUID (interface to cast to).
Observed: 3D 0000 CastAd Collection
Form1.mnuFindReplace_Click @ 0x446984 | 4469FF 3D CD00 CastAd {AD0104D9-9193-4F6A-B76F-8BDBC1D4319F}
Form1.mnuJavascriptUI_Click @ 0x45B844 | 45B8FA 3D 3F00 CastAd CPDFStream
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474191 3D 3700 CastAd IListItem ;{BDD1F04E-858B-11D1-B16A-00C0F0283628}
79 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3D_CastAd.
Handler: 0x6610614D, shared by 2 dispatch slots (real opcode #60). This is the primary slot. Other slots: (3,F2) CastAd.
Corpus: 79 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610614D, dispatch slot 0x66106E08, modOpcodes line 446.
CastAd
(3,0xF2)not emitteddup of (0,3D)handler #60Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FD F2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %G
Operands:
%G: guid_extract, 2 byte(s). 16-bit constant-pool index of a GUID (interface to cast to).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610614D, shared by 2 dispatch slots (real opcode #60). This is a duplicate slot of (0,3D) CastAd. Other slots: (0,3D) CastAd.
Description: none. Handler 0x6610614D, dispatch slot 0x66107CDC, modOpcodes line 447.
CastAdVar
(3,0xF3)emittedhandler #585Object / COMinferred_corpus331 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim v As Variant, c As Collection
Set c = v
End Sub
Encoding, evidence and notes
Encoding: FD F3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %G
Operands:
%G: guid_extract, 2 byte(s). 16-bit constant-pool index of a GUID (interface to cast to).
Observed: FDF3 0000 CastAdVar Collection
Form1.LoadPlugins @ 0x4644FC | 464567 FDF3 0800 CastAdVar IListItems ;{BDD1F04C-858B-11D1-B16A-00C0F0283628}
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FB5 FDF3 0800 CastAdVar IListItems ;{BDD1F04C-858B-11D1-B16A-00C0F0283628}
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4614AA FDF3 3F00 CastAdVar CPDFStream
331 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F3_CastAdVar.
Handler: 0x66106139, unique to this slot (real opcode #585).
Corpus: 331 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106139, dispatch slot 0x66107CE0, modOpcodes line 448.
FnCBoolVar
(2,0x4D)emittedhandler #387Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: FC 4D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4D FnCBoolVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4D_FnCBoolVar.
Handler: 0x66109779, unique to this slot (real opcode #387).
Description: draft, by claude-opus-4.7. Handler 0x66109779, dispatch slot 0x66107648, modOpcodes line 948.
FnCByteVar
(2,0x44)emittedhandler #381Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC 44 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC44 FnCByteVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_44_FnCByteVar.
Handler: 0x66109742, unique to this slot (real opcode #381).
Description: draft, by claude-opus-4.7. Handler 0x66109742, dispatch slot 0x66107624, modOpcodes line 942.
FnCCurVar
(2,0x49)emittedhandler #385Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Currency
c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding: FC 49 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC49 FnCCurVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_49_FnCCurVar.
Handler: 0x66109754, unique to this slot (real opcode #385).
Description: draft, by claude-opus-4.7. Handler 0x66109754, dispatch slot 0x66107638, modOpcodes line 946.
FnCDateVar
(2,0x4E)emittedprimary of 2handler #388Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim v As Variant, w As Variant
v = CDate(w)
End Sub
Encoding, evidence and notes
Encoding: FC 4E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4E FnCDateVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4E_FnCDateVar.
Handler: 0x66109731, shared by 2 dispatch slots (real opcode #388). This is the primary slot. Other slots: (2,4F) FnCDateVar.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,4E):
Dim v As Variant, w As Variant : v = CDate(w) - (2,4F):
Dim a As Variant, c As Date : c = a
Finding: Compiler selects this slot for an explicit CDate(<Variant>). (2,4F) is used for implicit Variant to Date coercion (assignment to a Date variable).
Description: draft, by claude-opus-4.7. Handler 0x66109731, dispatch slot 0x6610764C, modOpcodes line 949.
FnCDateVar
(2,0x4F)emitteddup of (2,4E)handler #388Conversionconfirmed_handlerAlias dispatch slot (2, 0x4F) for the canonical FnCDateVar at (2, 0x4E); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Date
c = a
End Sub
Encoding, evidence and notes
Encoding: FC 4F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4F FnCDateVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4F_FnCDateVar.
Handler: 0x66109731, shared by 2 dispatch slots (real opcode #388). This is a duplicate slot of (2,4E) FnCDateVar. Other slots: (2,4E) FnCDateVar.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,4E):
Dim v As Variant, w As Variant : v = CDate(w) - (2,4F):
Dim a As Variant, c As Date : c = a
Finding: Compiler selects this slot for implicit Variant to Date coercion. (2,4E) is used for an explicit CDate(v).
Description: draft, by claude-opus-4.7. Handler 0x66109731, dispatch slot 0x66107650, modOpcodes line 950.
FnCDblCy
(2,0x39)emittedhandler #375Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Currency, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: FC 39 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC39 FnCDblCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_39_FnCDblCy.
Handler: 0x66109578, unique to this slot (real opcode #375).
Description: draft, by claude-opus-4.7. Handler 0x66109578, dispatch slot 0x661075F8, modOpcodes line 935.
FnCDblR8
(2,0x3A)emittedprimary of 2handler #376Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Single, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: FC 3A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC3A FnCDblR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_3A_FnCDblR8.
Handler: 0x66109584, shared by 2 dispatch slots (real opcode #376). This is the primary slot. Other slots: (2,3B) FnCDblR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,3A):
Dim a As Single, c As Double : c = CDbl(a) - (2,3B):
Dim a As Double, c As Double : c = CDbl(a)
Finding: Compiler selects this slot for CDbl(<Single>) / CDate(<Single>). (2,3B) is used for Double sources.
Description: draft, by claude-opus-4.7. Handler 0x66109584, dispatch slot 0x661075FC, modOpcodes line 936.
FnCDblR8
(2,0x3B)emitteddup of (2,3A)handler #376Conversionconfirmed_handlerAlias dispatch slot (2, 0x3B) for the canonical FnCDblR8 at (2, 0x3A); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Double, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: FC 3B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC3B FnCDblR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_3B_FnCDblR8.
Handler: 0x66109584, shared by 2 dispatch slots (real opcode #376). This is a duplicate slot of (2,3A) FnCDblR8. Other slots: (2,3A) FnCDblR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,3A):
Dim a As Single, c As Double : c = CDbl(a) - (2,3B):
Dim a As Double, c As Double : c = CDbl(a)
Finding: Compiler selects this slot for CDbl(<Double>) / CDate(<Double>).
Description: draft, by claude-opus-4.7. Handler 0x66109584, dispatch slot 0x66107600, modOpcodes line 937.
FnCDblVar
(2,0x48)emittedhandler #384Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Double
c = CDbl(a)
End Sub
Encoding, evidence and notes
Encoding: FC 48 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC48 FnCDblVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_48_FnCDblVar.
Handler: 0x66109567, unique to this slot (real opcode #384).
Description: draft, by claude-opus-4.7. Handler 0x66109567, dispatch slot 0x66107634, modOpcodes line 945.
FnCIntVar
(2,0x45)emittedhandler #382Conversionconfirmed_msdocs5 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Integer
c = CInt(a)
End Sub
Encoding, evidence and notes
Encoding: FC 45 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC45 FnCIntVar
CSharpFilters.SetPredictorParams @ 0x441250 | 441272 FC45 FnCIntVar
CSharpFilters.SetPredictorParams @ 0x441250 | 44127E FC45 FnCIntVar
CSharpFilters.SetPredictorParams @ 0x441250 | 44128A FC45 FnCIntVar
5 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_45_FnCIntVar.
Handler: 0x661053FF, unique to this slot (real opcode #382).
Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661053FF, dispatch slot 0x66107628, modOpcodes line 943.
FnCLngVar
(2,0x46)emittedhandler #383Conversionconfirmed_msdocs19 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Long
c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding: FC 46 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC46 FnCLngVar
Form1.SleepFor @ 0x43E7AC | 43E7BD FC46 FnCLngVar
Form2.lvFunc_DblClick() @ 0x44DF8C | 44DFE7 FC46 FnCLngVar
Form2.lvFunc_DblClick() @ 0x44DF8C | 44E037 FC46 FnCLngVar
19 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_46_FnCLngVar.
Handler: 0x66105411, unique to this slot (real opcode #383).
Corpus: 19 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105411, dispatch slot 0x6610762C, modOpcodes line 944.
FnCSngCy
(2,0x41)emittedhandler #379Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Currency, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: FC 41 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC41 FnCSngCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_41_FnCSngCy.
Handler: 0x66109559, unique to this slot (real opcode #379).
Description: draft, by claude-opus-4.7. Handler 0x66109559, dispatch slot 0x66107618, modOpcodes line 939.
FnCSngI2
(2,0x24)not emitteddup of (0,EB)handler #232Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 24 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.
(0,0xEB) CR8I2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075A4, modOpcodes line 845.
FnCSngI2
(2,0x25)not emitteddup of (0,EB)handler #232Conversionconfirmed_handlerAlias dispatch slot (2, 0x25) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 25 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.
(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075A8, modOpcodes line 846.
FnCSngI2
(2,0x2C)not emitteddup of (0,EB)handler #232Conversionconfirmed_handlerAlias dispatch slot (2, 0x2C) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 2C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.
(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075C4, modOpcodes line 847.
FnCSngI2
(2,0x2D)not emitteddup of (0,EB)handler #232Conversionconfirmed_handlerAlias dispatch slot (2, 0x2D) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 2D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,3C) FnCSngI2, (2,3D) FnCSngI2.
(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x3C) FnCSngI2, (2,0x3D) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x661075C8, modOpcodes line 848.
FnCSngI2
(2,0x3C)not emitteddup of (0,EB)handler #232Conversionconfirmed_handlerAlias dispatch slot (2, 0x3C) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 3C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3D) FnCSngI2.
(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3D) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x66107604, modOpcodes line 849.
FnCSngI2
(2,0x3D)not emitteddup of (0,EB)handler #232Conversionconfirmed_handlerAlias dispatch slot (2, 0x3D) for the canonical FnCSngI2 at (2, 0x24); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FC 3D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610526A, shared by 7 dispatch slots (real opcode #232). This is a duplicate slot of (0,EB) CR8I2. Other slots: (0,EB) CR8I2, (2,24) FnCSngI2, (2,25) FnCSngI2, (2,2C) FnCSngI2, (2,2D) FnCSngI2, (2,3C) FnCSngI2.
(0,0xEB) CR8I2, (2,0x24) FnCSngI2, (2,0x25) FnCSngI2, (2,0x2C) FnCSngI2, (2,0x2D) FnCSngI2, (2,0x3C) FnCSngI2
Description: draft, by claude-opus-4.7. Handler 0x6610526A, dispatch slot 0x66107608, modOpcodes line 850.
FnCSngI4
(2,0x3E)emittedhandler #377Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Long, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: FC 3E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC3E FnCSngI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_3E_FnCSngI4.
Handler: 0x6610953C, unique to this slot (real opcode #377).
Description: draft, by claude-opus-4.7. Handler 0x6610953C, dispatch slot 0x6610760C, modOpcodes line 938.
FnCSngStr
(2,0x43)emitteddup of (2,2B)handler #370Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As String, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: FC 43 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC43 FnCSngStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_43_FnCSngStr.
Handler: 0x661053E4, shared by 2 dispatch slots (real opcode #370). This is a duplicate slot of (2,2B) CR4Str. Other slots: (2,2B) CR4Str.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (2,2B):
Dim a As String, c As Single : c = a - (2,43):
Dim a As String, c As Single : c = CSng(a)
Description: draft, by claude-opus-4.7. Handler 0x661053E4, dispatch slot 0x66107620, modOpcodes line 941.
FnCSngVar
(2,0x42)emittedhandler #380Conversionconfirmed_msdocsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: FC 42 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC42 FnCSngVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_42_FnCSngVar.
Handler: 0x66109552, unique to this slot (real opcode #380).
Description: draft, by claude-opus-4.7. Handler 0x66109552, dispatch slot 0x6610761C, modOpcodes line 940.
FnCStrVar
(2,0x4B)emittedhandler #386Conversionconfirmed_msdocs14 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: FC 4B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC4B FnCStrVar
fso.Proc_444A2C @ 0x444A2C | 444A9F FC4B FnCStrVar
fso.Proc_4454EC @ 0x4454EC | 44555F FC4B FnCStrVar
fso.Proc_449A54 @ 0x449A54 | 449B03 FC4B FnCStrVar
14 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_4B_FnCStrVar.
Handler: 0x66109767, unique to this slot (real opcode #386).
Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109767, dispatch slot 0x66107640, modOpcodes line 947.
HardType
(0,0x5D)emittedprimary of 2handler #91Conversionconfirmed_msdocs302 corpus hitsPerforms a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Public Sub Main()
Dim a As Variant, n As Long
Select Case a
Case "a" To "f": n = 1
End Select
End Sub
Encoding, evidence and notes
Encoding: 5D, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 5D HardType
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A308 5D HardType
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A31B 5D HardType
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A376 5D HardType
302 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5D_HardType.
Handler: 0x661054CF, shared by 2 dispatch slots (real opcode #91). This is the primary slot. Other slots: (3,02) HardType.
Corpus: 302 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661054CF, dispatch slot 0x66106E88, modOpcodes line 463.
HardType
(3,0x02)not emitteddup of (0,5D)handler #91Conversionconfirmed_handlerAlias dispatch slot (3, 0x02) for the canonical HardType at (0, 0x5D); semantics are identical.
Performs a VB6 type conversion. Mnemonic does not decompose cleanly into dest/src; see family description and printf template.
Stack: [..., src] -> [..., dest]
Emitted at the boundary of a type-mismatched assignment, argument pass, or coercion.
Encoding, evidence and notes
Encoding: FD 02 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661054CF, shared by 2 dispatch slots (real opcode #91). This is a duplicate slot of (0,5D) HardType. Other slots: (0,5D) HardType.
Description: draft, by claude-opus-4.7. Handler 0x661054CF, dispatch slot 0x6610791C, modOpcodes line 464.
Compare_Between
Between range comparison
BetweenCy
(1,0x89)emittedhandler #313Currencyconfirmed_msdocsCase lo To hi range test on a Currency selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:Cy, lo:Cy, hi:Cy] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Currency selector.
Public Sub Main()
Dim a As Currency, n As Long
Select Case a + 1
Case 3 To 5: n = 2
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 89 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB89 BetweenCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_89_BetweenCy.
Handler: 0x661093E2, unique to this slot (real opcode #313).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, r As Long
c = 4
Select Case c
Case 3 To 5: r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x661093E2, dispatch slot 0x66107338, modOpcodes line 1562.
BetweenI2
(1,0x85)emittedhandler #310Integerconfirmed_msdocsCase lo To hi range test on a Integer selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:I2, lo:I2, hi:I2] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Integer or Boolean selector (also Byte arithmetic, which VB types as Integer).
Public Sub Main()
Dim a As Boolean, n As Long
Select Case a + 1
Case 3 To 5: n = 2
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 85 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB85 BetweenI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_85_BetweenI2.
Handler: 0x66109387, unique to this slot (real opcode #310).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim n As Integer, r As Long
n = 4
Select Case n
Case 3 To 5: r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x66109387, dispatch slot 0x66107328, modOpcodes line 1558.
BetweenI4
(1,0x86)emittedhandler #311Integerconfirmed_msdocsCase lo To hi range test on a Long selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:I4, lo:I4, hi:I4] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Long selector.
Public Sub Main()
Dim a As Long, n As Long
Select Case a + 1
Case 3 To 5: n = 2
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 86 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB86 BetweenI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_86_BetweenI4.
Handler: 0x661093A9, unique to this slot (real opcode #311).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim n As Long, r As Long
n = 4
Select Case n
Case 3 To 5: r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x661093A9, dispatch slot 0x6610732C, modOpcodes line 1559.
BetweenR4
(1,0x87)emittedprimary of 2handler #312Floating pointconfirmed_msdocsCase lo To hi range test on a Single selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:R4, lo:R4, hi:R4] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Single selector. Double and Date selectors use (1,88), which shares the handler.
Public Sub Main()
Dim a As Single, n As Long
Select Case a + 1
Case 3 To 5: n = 2
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 87 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB87 BetweenR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_87_BetweenR4.
Handler: 0x661093B4, shared by 2 dispatch slots (real opcode #312). This is the primary slot. Other slots: (1,88) BetweenR4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,87):
Dim a As Single, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select - (1,88):
Dim a As Double, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select
Finding: Compiler selects this slot for Case a To b on a Single selector. (1,88) is used for Double/Date.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim x As Single, r As Long
x = 4
Select Case x
Case 3 To 5: r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x661093B4, dispatch slot 0x66107330, modOpcodes line 1560.
BetweenR4
(1,0x88)emitteddup of (1,87)handler #312Floating pointconfirmed_handlerCase lo To hi range test on a Double selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:R8, lo:R8, hi:R8] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Double or Date selector. The slot is named BetweenR4 (alias of (1,87)), but the compiler uses it for Double.
Public Sub Main()
Dim a As Double, n As Long
Select Case a + 1
Case 3 To 5: n = 2
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 88 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB88 BetweenR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_88_BetweenR4.
Handler: 0x661093B4, shared by 2 dispatch slots (real opcode #312). This is a duplicate slot of (1,87) BetweenR4. Other slots: (1,87) BetweenR4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,87):
Dim a As Single, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select - (1,88):
Dim a As Double, n As Long : Select Case a + 1 : Case 3 To 5: n = 2 : End Select
Finding: Compiler selects this slot for Case a To b on a Double or Date selector. Effective meaning: BetweenR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim x As Double, r As Long
x = 4
Select Case x
Case 3 To 5: r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x661093B4, dispatch slot 0x66107334, modOpcodes line 1561.
BetweenStr
(1,0x8B)emittedhandler #315Stringconfirmed_msdocsCase lo To hi range test on a String selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:Str, lo:Str, hi:Str] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is String selector, binary comparison.
Public Sub Main()
Dim a As String, n As Long
Select Case a
Case "a" To "f": n = 1
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 8B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8B BetweenStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8B_BetweenStr.
Handler: 0x6610942D, unique to this slot (real opcode #315).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim s As String, r As Long
s = "c"
Select Case s
Case "a" To "f": r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x6610942D, dispatch slot 0x66107340, modOpcodes line 1564.
BetweenTextStr
(1,0x8D)emittedhandler #317Stringconfirmed_msdocsCase lo To hi range test on a String selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:Str, lo:Str, hi:Str] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is String selector under Option Compare Text (case-insensitive).
Option Compare Text
Public Sub Main()
Dim a As String, n As Long
Select Case a
Case "a" To "f": n = 1
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 8D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8D BetweenTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8D_BetweenTextStr.
Handler: 0x66109403, unique to this slot (real opcode #317).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim s As String, r As Long
s = "c"
Select Case s
Case "a" To "f": r = 1
End Select
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109403, dispatch slot 0x66107348, modOpcodes line 1566.
BetweenTextVar
(1,0x8C)emittedhandler #316Variantconfirmed_msdocsCase lo To hi range test on a Variant selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:Var, lo:Var, hi:Var] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Variant selector under Option Compare Text. Without it BetweenVar (1,8A) is used.
Option Compare Text
Public Sub Main()
Dim a As Variant, n As Long
Select Case a
Case "a" To "f": n = 1
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 8C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8C BetweenTextVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8C_BetweenTextVar.
Handler: 0x66109434, unique to this slot (real opcode #316).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim v As Variant, r As Long
v = "c"
Select Case v
Case "a" To "f": r = 1
End Select
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109434, dispatch slot 0x66107344, modOpcodes line 1565.
BetweenUI1
(1,0x84)emittedhandler #309Integerconfirmed_msdocsCase lo To hi range test on a Byte selector; push Boolean.Inclusive range test for a Case lo To hi clause. Pops the upper and lower bounds and the selector value, and pushes True if lo <= value <= hi.
Stack: [..., v:UI1, lo:UI1, hi:UI1] -> [..., (lo<=v<=hi):Bool]
Emitted for each Case lo To hi clause of a Select Case whose selector is Byte selector. A Byte expression such as b + 1 is Integer-typed and uses BetweenI2.
Public Sub Main()
Dim a As Byte, n As Long
Select Case a
Case 3 To 5: n = 2
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 84 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB84 BetweenUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_84_BetweenUI1.
Handler: 0x66109369, unique to this slot (real opcode #309).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim b As Byte, r As Long
b = 4
Select Case b
Case 3 To 5: r = 1
End SelectDescription: draft, by claude-opus-5-5. Handler 0x66109369, dispatch slot 0x66107324, modOpcodes line 1557.
BetweenVar
(1,0x8A)emittedhandler #314Variantconfirmed_msdocsImplements the inclusive range test used by Select Case lo To hi clauses.
Stack: [..., val:T, lo:T, hi:T] -> [..., (lo<=val<=hi):Bool]
Emitted exclusively for Select Case ... To ... clauses. Suffix matches the case expression's type.
Public Sub Main()
Dim a As Variant, n As Long
Select Case a
Case "a" To "f": n = 1
End Select
End Sub
Encoding, evidence and notes
Encoding: FB 8A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8A BetweenVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8A_BetweenVar.
Handler: 0x6610946E, unique to this slot (real opcode #314).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Select Case x
Case lo To hi
' ...
End SelectDescription: draft, by claude-opus-4.7. Handler 0x6610946E, dispatch slot 0x6610733C, modOpcodes line 1563.
Compare_Eq
Equal-to comparison
EqCy
(0,0xC9)emittedprimary of 2handler #198Currencyconfirmed_msdocs=; push Boolean result.Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed Cy. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Public Sub Main()
Dim a As Currency, b As Currency, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: C9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C9 EqCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C9_EqCy.
Handler: 0x6610C0E2, shared by 2 dispatch slots (real opcode #198). This is the primary slot. Other slots: (1,2E) EqCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x6610C0E2, dispatch slot 0x66107038, modOpcodes line 1477.
EqCy
(1,0x2E)not emitteddup of (0,C9)handler #198Currencyconfirmed_handler=; push Boolean result.Alias dispatch slot (1, 0x2E) for the canonical EqCy at (0, 0xC9); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed Cy. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Dim a As Currency, b As Currency, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding: FB 2E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C0E2, shared by 2 dispatch slots (real opcode #198). This is a duplicate slot of (0,C9) EqCy. Other slots: (0,C9) EqCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C9) EqCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C0E2, dispatch slot 0x661071CC, modOpcodes line 1484.
EqCyR8
(0,0xCA)emittedprimary of 2handler #199Currencyconfirmed_msdocs=; push Boolean.Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c = x):Bool]
Emitted when one operand of = is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency = Currency uses EqCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.
Public Sub Main()
Dim a As Currency, b As Single, c As Variant
c = a = b
End Sub
Encoding, evidence and notes
Encoding: CA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CA EqCyR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CA_EqCyR8.
Handler: 0x6610C0EC, shared by 2 dispatch slots (real opcode #199). This is the primary slot. Other slots: (1,35) EqCyR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double, b As Boolean
b = (c = d)Description: draft, by claude-opus-5-5. Handler 0x6610C0EC, dispatch slot 0x6610703C, modOpcodes line 1478.
EqCyR8
(1,0x35)not emitteddup of (0,CA)handler #199Currencyconfirmed_handler=; push Boolean.Dispatch slot (1, 0x35) runs the same MSVBVM60 handler as (0,CA) EqCyR8; runtime behaviour is identical.
Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c = x):Bool]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency = non-Currency) compiles to (0,CA) EqCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB 35 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C0EC, shared by 2 dispatch slots (real opcode #199). This is a duplicate slot of (0,CA) EqCyR8. Other slots: (0,CA) EqCyR8.
Description: draft, by claude-opus-5-5. Handler 0x6610C0EC, dispatch slot 0x661071E8, modOpcodes line 1489.
EqI2
(0,0xC6)emittedprimary of 3handler #195Integerconfirmed_msdocs209 corpus hits=; push Boolean result.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed I2. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: C6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C6 EqI2
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1AD C6 EqI2
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C3D9 C6 EqI2
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 456769 C6 EqI2
209 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C6_EqI2.
Handler: 0x6610697C, shared by 3 dispatch slots (real opcode #195). This is the primary slot. Other slots: (1,29) EqI2, (1,2A) EqI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 209 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x6610697C, dispatch slot 0x6610702C, modOpcodes line 1474.
EqI2
(1,0x29)not emitteddup of (0,C6)handler #195Integerconfirmed_handler=; push Boolean result.Alias dispatch slot (1, 0x29) for the canonical EqI2 at (0, 0xC6); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed I2. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Dim a As Integer, b As Integer, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding: FB 29 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610697C, shared by 3 dispatch slots (real opcode #195). This is a duplicate slot of (0,C6) EqI2. Other slots: (0,C6) EqI2, (1,2A) EqI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C6) EqI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610697C, dispatch slot 0x661071B8, modOpcodes line 1479.
EqI2
(1,0x2A)not emitteddup of (0,C6)handler #195Integerconfirmed_handler=; push Boolean result.Alias dispatch slot (1, 0x2A) for the canonical EqI2 at (0, 0xC6); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed I2. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Dim a As Integer, b As Integer, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding: FB 2A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610697C, shared by 3 dispatch slots (real opcode #195). This is a duplicate slot of (0,C6) EqI2. Other slots: (0,C6) EqI2, (1,29) EqI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C6) EqI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610697C, dispatch slot 0x661071BC, modOpcodes line 1480.
EqI4
(0,0xC7)emittedprimary of 2handler #196Integerconfirmed_msdocs234 corpus hits=; push Boolean result.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed I4. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Public Sub Main()
Dim a As Long, b As Long, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: C7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C7 EqI4
Form1.LoadPlugins @ 0x4644FC | 4646B1 C7 EqI4
Form1.LoadPlugins @ 0x4644FC | 4646DC C7 EqI4
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3B6 C7 EqI4
234 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C7_EqI4.
Handler: 0x66106994, shared by 2 dispatch slots (real opcode #196). This is the primary slot. Other slots: (1,2B) EqI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 234 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x66106994, dispatch slot 0x66107030, modOpcodes line 1475.
EqI4
(1,0x2B)not emitteddup of (0,C7)handler #196Integerconfirmed_handler=; push Boolean result.Alias dispatch slot (1, 0x2B) for the canonical EqI4 at (0, 0xC7); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed I4. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Dim a As Long, b As Long, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding: FB 2B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106994, shared by 2 dispatch slots (real opcode #196). This is a duplicate slot of (0,C7) EqI4. Other slots: (0,C7) EqI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C7) EqI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106994, dispatch slot 0x661071C0, modOpcodes line 1481.
EqR8
(0,0xC8)emittedprimary of 3handler #197Floating pointconfirmed_msdocs=; push Boolean result.Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed R8. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Public Sub Main()
Dim a As Date, b As Date, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: C8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C8 EqR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C8_EqR8.
Handler: 0x661069AA, shared by 3 dispatch slots (real opcode #197). This is the primary slot. Other slots: (1,2C) EqR8, (1,2D) EqR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, b As Double, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x661069AA, dispatch slot 0x66107034, modOpcodes line 1476.
EqR8
(1,0x2C)not emitteddup of (0,C8)handler #197Floating pointconfirmed_handler=; push Boolean result.Alias dispatch slot (1, 0x2C) for the canonical EqR8 at (0, 0xC8); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed R8. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Dim a As Double, b As Double, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding: FB 2C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069AA, shared by 3 dispatch slots (real opcode #197). This is a duplicate slot of (0,C8) EqR8. Other slots: (0,C8) EqR8, (1,2D) EqR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C8) EqR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069AA, dispatch slot 0x661071C4, modOpcodes line 1482.
EqR8
(1,0x2D)not emitteddup of (0,C8)handler #197Floating pointconfirmed_handler=; push Boolean result.Alias dispatch slot (1, 0x2D) for the canonical EqR8 at (0, 0xC8); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed R8. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Dim a As Double, b As Double, c As Boolean
c = (a = b)
Encoding, evidence and notes
Encoding: FB 2D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069AA, shared by 3 dispatch slots (real opcode #197). This is a duplicate slot of (0,C8) EqR8. Other slots: (0,C8) EqR8, (1,2C) EqR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C8) EqR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069AA, dispatch slot 0x661071C8, modOpcodes line 1483.
EqStr
(1,0x30)emittedhandler #264Stringconfirmed_msdocs17 corpus hits=; push Boolean result.Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:Str, b:Str] -> [..., (a = b):I2]
Emitted for = when both operands are statically typed Str. Other type pairings select the matching suffix variant (EqI2/EqI4/EqR8/EqStr/EqVar).
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: FB 30 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB30 EqStr
Form1.mnuHexEditor_Click @ 0x462D24 | 462D6A FB30 EqStr
Form2.txtJS_AutoCompleteEvent(ByRef className As String) @ 0x44291C | 44293D FB30 EqStr
Form2.txtJS_AutoCompleteEvent(ByRef className As String) @ 0x44291C | 442945 FB30 EqStr
17 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_30_EqStr.
Handler: 0x661069B1, unique to this slot (real opcode #264).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As String, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x661069B1, dispatch slot 0x661071D4, modOpcodes line 1485.
EqTextStr
(1,0x32)emittedhandler #266Stringconfirmed_msdocs=; push Boolean result.Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:TextStr, b:TextStr] -> [..., (a = b):I2]
Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.
Emitted for = when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: FB 32 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB32 EqTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_32_EqTextStr.
Handler: 0x6610C0F6, unique to this slot (real opcode #266).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x6610C0F6, dispatch slot 0x661071DC, modOpcodes line 1486.
EqTextVar
(1,0x31)emittedhandler #265Variantinferred_corpus= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with = using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a = b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: FB 31 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB31 48FF EqTextVar var_B8
FB31 48FF EqTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_31_EqTextVar.
Handler: 0x6610C248, unique to this slot (real opcode #265).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a = b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C248, dispatch slot 0x661071D8, modOpcodes line 1491.
EqTextVarBool
(1,0x34)emittedhandler #268Variantconfirmed_msdocs= comparison (text mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with = (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v = w)), the compiler uses EqTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a = b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 34 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB34 EqTextVarBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_34_EqTextVarBool.
Handler: 0x6610C28D, unique to this slot (real opcode #268).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a = b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C28D, dispatch slot 0x661071E4, modOpcodes line 1488.
EqVar
(1,0x2F)emittedhandler #263Variantinferred_corpus43 corpus hits=; push Boolean result.Pops two VBA Variant operands b and a (top is b), pushes (a = b) as a I2 result.
Stack: [..., a:Var, b:Var] -> [..., (a = b):I2]
Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.
Emitted for = when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a = b)
End Sub
Encoding, evidence and notes
Encoding: FB 2F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB2F 48FF EqVar var_B8
Form1.Form_Load @ 0x479DC0 | 47A54A FB2F F0FE EqVar var_110
Form1.Form_Load @ 0x479DC0 | 47A5AF FB2F F0FE EqVar var_110
Form1.Form_Load @ 0x479DC0 | 47A614 FB2F F0FE EqVar var_110
43 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_2F_EqVar.
Handler: 0x66106B4B, unique to this slot (real opcode #263).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Boolean
c = (a = b)Description: draft, by claude-opus-4.7. Handler 0x66106B4B, dispatch slot 0x661071D0, modOpcodes line 1490.
EqVarBool
(1,0x33)emittedhandler #267Variantconfirmed_msdocs120 corpus hits= comparison (binary mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with = (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v = w)), the compiler uses EqVar instead, which produces a Variant (possibly Null).
Public Sub Main()
Dim a(5) As Boolean, x As Variant
For Each x In a
If x = x Then Exit For
Next
End Sub
Encoding, evidence and notes
Encoding: FB 33 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB33 EqVarBool
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A309 FB33 EqVarBool
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A31C FB33 EqVarBool
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A377 FB33 EqVarBool
120 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_33_EqVarBool.
Handler: 0x66106B78, unique to this slot (real opcode #267).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 120 occurrence(s) in PDFStreamDumper_p.exe.
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a = b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x66106B78, dispatch slot 0x661071E0, modOpcodes line 1487.
Compare_Ge
Greater-or-equal comparison
GeCy
(0,0xE2)emittedprimary of 2handler #223Currencyconfirmed_msdocs>=; push Boolean result.Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Public Sub Main()
Dim a As Currency, b As Currency, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: E2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E2 GeCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E2_GeCy.
Handler: 0x6610C1ED, shared by 2 dispatch slots (real opcode #223). This is the primary slot. Other slots: (1,55) GeCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x6610C1ED, dispatch slot 0x6610709C, modOpcodes line 1453.
GeCy
(1,0x55)not emitteddup of (0,E2)handler #223Currencyconfirmed_handler>=; push Boolean result.Alias dispatch slot (1, 0x55) for the canonical GeCy at (0, 0xE2); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Dim a As Currency, b As Currency, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding: FB 55 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C1ED, shared by 2 dispatch slots (real opcode #223). This is a duplicate slot of (0,E2) GeCy. Other slots: (0,E2) GeCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E2) GeCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C1ED, dispatch slot 0x66107268, modOpcodes line 1460.
GeCyR8
(0,0xE3)emittedprimary of 2handler #224Currencyconfirmed_msdocs>=; push Boolean.Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c >= x):Bool]
Emitted when one operand of >= is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency >= Currency uses GeCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.
Public Sub Main()
Dim a As Currency, b As Single, c As Variant
c = a >= b
End Sub
Encoding, evidence and notes
Encoding: E3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E3 GeCyR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E3_GeCyR8.
Handler: 0x6610C1F7, shared by 2 dispatch slots (real opcode #224). This is the primary slot. Other slots: (1,5C) GeCyR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double, b As Boolean
b = (c >= d)Description: draft, by claude-opus-5-5. Handler 0x6610C1F7, dispatch slot 0x661070A0, modOpcodes line 1454.
GeCyR8
(1,0x5C)not emitteddup of (0,E3)handler #224Currencyconfirmed_handler>=; push Boolean.Dispatch slot (1, 0x5C) runs the same MSVBVM60 handler as (0,E3) GeCyR8; runtime behaviour is identical.
Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c >= x):Bool]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency >= non-Currency) compiles to (0,E3) GeCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB 5C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C1F7, shared by 2 dispatch slots (real opcode #224). This is a duplicate slot of (0,E3) GeCyR8. Other slots: (0,E3) GeCyR8.
Description: draft, by claude-opus-5-5. Handler 0x6610C1F7, dispatch slot 0x66107284, modOpcodes line 1465.
GeI2
(0,0xDF)emittedprimary of 2handler #220Integerconfirmed_msdocs8 corpus hits>=; push Boolean result.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed I2. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: DF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DF GeI2
CFunc.isTextRange @ 0x44183C | 441847 DF GeI2
CFunc.isTextRange @ 0x44183C | 44185C DF GeI2
CFunc.isTextRange @ 0x44183C | 441871 DF GeI2
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DF_GeI2.
Handler: 0x66106AD2, shared by 2 dispatch slots (real opcode #220). This is the primary slot. Other slots: (1,51) GeI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x66106AD2, dispatch slot 0x66107090, modOpcodes line 1450.
GeI2
(1,0x51)not emitteddup of (0,DF)handler #220Integerconfirmed_handler>=; push Boolean result.Alias dispatch slot (1, 0x51) for the canonical GeI2 at (0, 0xDF); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed I2. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Dim a As Integer, b As Integer, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding: FB 51 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106AD2, shared by 2 dispatch slots (real opcode #220). This is a duplicate slot of (0,DF) GeI2. Other slots: (0,DF) GeI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DF) GeI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106AD2, dispatch slot 0x66107258, modOpcodes line 1456.
GeI4
(0,0xE0)emittedprimary of 2handler #221Integerconfirmed_msdocs1 corpus hits>=; push Boolean result.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed I4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Public Sub Main()
Dim a As Long, b As Long, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: E0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E0 GeI4
frmReplace.cmdFindNext_Click @ 0x459BD4 | 459C63 E0 GeI4
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E0_GeI4.
Handler: 0x6610C1E4, shared by 2 dispatch slots (real opcode #221). This is the primary slot. Other slots: (1,52) GeI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x6610C1E4, dispatch slot 0x66107094, modOpcodes line 1451.
GeI4
(1,0x52)not emitteddup of (0,E0)handler #221Integerconfirmed_handler>=; push Boolean result.Alias dispatch slot (1, 0x52) for the canonical GeI4 at (0, 0xE0); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed I4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Dim a As Long, b As Long, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding: FB 52 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C1E4, shared by 2 dispatch slots (real opcode #221). This is a duplicate slot of (0,E0) GeI4. Other slots: (0,E0) GeI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E0) GeI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C1E4, dispatch slot 0x6610725C, modOpcodes line 1457.
GeR4
(1,0x53)not emitteddup of (0,E1)handler #222Floating pointconfirmed_msdocs>=; push Boolean result.Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed R4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Dim a As Single, b As Single, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding: FB 53 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106AEE, shared by 3 dispatch slots (real opcode #222). This is a duplicate slot of (0,E1) GeR8. Other slots: (0,E1) GeR8, (1,54) GeR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E1) GeR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106AEE, dispatch slot 0x66107260, modOpcodes line 1458.
GeR4
(1,0x54)not emitteddup of (0,E1)handler #222Floating pointconfirmed_handler>=; push Boolean result.Alias dispatch slot (1, 0x54) for the canonical GeR4 at (1, 0x53); semantics are identical.
Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed R4. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Dim a As Single, b As Single, c As Boolean
c = (a >= b)
Encoding, evidence and notes
Encoding: FB 54 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106AEE, shared by 3 dispatch slots (real opcode #222). This is a duplicate slot of (0,E1) GeR8. Other slots: (0,E1) GeR8, (1,53) GeR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,E1) GeR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106AEE, dispatch slot 0x66107264, modOpcodes line 1459.
GeR8
(0,0xE1)emittedprimary of 3handler #222Floating pointconfirmed_msdocs>=; push Boolean result.Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed R8. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Public Sub Main()
Dim a As Date, b As Date, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: E1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: E1 GeR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_E1_GeR8.
Handler: 0x66106AEE, shared by 3 dispatch slots (real opcode #222). This is the primary slot. Other slots: (1,53) GeR4, (1,54) GeR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, b As Double, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x66106AEE, dispatch slot 0x66107098, modOpcodes line 1452.
GeStr
(1,0x57)emittedhandler #284Stringconfirmed_msdocs>=; push Boolean result.Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:Str, b:Str] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed Str. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: FB 57 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB57 GeStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_57_GeStr.
Handler: 0x6610C20F, unique to this slot (real opcode #284).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As String, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x6610C20F, dispatch slot 0x66107270, modOpcodes line 1461.
GeTextStr
(1,0x59)emittedhandler #286Stringconfirmed_msdocs>=; push Boolean result.Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:TextStr, b:TextStr] -> [..., (a >= b):I2]
Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.
Emitted for >= when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: FB 59 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB59 GeTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_59_GeTextStr.
Handler: 0x6610C201, unique to this slot (real opcode #286).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x6610C201, dispatch slot 0x66107278, modOpcodes line 1462.
GeTextVar
(1,0x58)emittedhandler #285Variantinferred_corpus>= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with >= using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a >= b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: FB 58 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB58 48FF GeTextVar var_B8
FB58 48FF GeTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_58_GeTextVar.
Handler: 0x6610C22A, unique to this slot (real opcode #285).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a >= b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C22A, dispatch slot 0x66107274, modOpcodes line 1467.
GeTextVarBool
(1,0x5B)emittedhandler #288Variantconfirmed_msdocs>= comparison (text mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with >= (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v >= w)), the compiler uses GeTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a >= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 5B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB5B GeTextVarBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_5B_GeTextVarBool.
Handler: 0x6610C266, unique to this slot (real opcode #288).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a >= b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C266, dispatch slot 0x66107280, modOpcodes line 1464.
GeUI1
(1,0x50)emittedhandler #282Integerconfirmed_msdocs2 corpus hits>=; push Boolean result.Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:UI1, b:UI1] -> [..., (a >= b):I2]
Emitted for >= when both operands are statically typed UI1. Other type pairings select the matching suffix variant (GeI2/GeI4/GeR8/GeStr/GeVar).
Public Sub Main()
Dim a As Byte, b As Byte, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: FB 50 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB50 GeUI1
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658DA FB50 GeUI1
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465903 FB50 GeUI1
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_50_GeUI1.
Handler: 0x6610C1CF, unique to this slot (real opcode #282).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Byte, b As Byte, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x6610C1CF, dispatch slot 0x66107254, modOpcodes line 1455.
GeVar
(1,0x56)emittedhandler #283Variantinferred_corpus1 corpus hits>=; push Boolean result.Pops two VBA Variant operands b and a (top is b), pushes (a >= b) as a I2 result.
Stack: [..., a:Var, b:Var] -> [..., (a >= b):I2]
Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.
Emitted for >= when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a >= b)
End Sub
Encoding, evidence and notes
Encoding: FB 56 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB56 48FF GeVar var_B8
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF80 FB56 E8FE GeVar var_118
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_56_GeVar.
Handler: 0x6610C236, unique to this slot (real opcode #283).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Boolean
c = (a >= b)Description: draft, by claude-opus-4.7. Handler 0x6610C236, dispatch slot 0x6610726C, modOpcodes line 1466.
GeVarBool
(1,0x5A)emittedhandler #287Variantconfirmed_msdocs3 corpus hits>= comparison (binary mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with >= (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v >= w)), the compiler uses GeVar instead, which produces a Variant (possibly Null).
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a >= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 5A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB5A GeVarBool
modEscapes.Proc_459E1C @ 0x459E1C | 459EA6 FB5A GeVarBool
modEscapes.Proc_455278 @ 0x455278 | 455302 FB5A GeVarBool
frmBruteZLib.setPB @ 0x4444FC | 444532 FB5A GeVarBool
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_5A_GeVarBool.
Handler: 0x6610C272, unique to this slot (real opcode #287).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a >= b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C272, dispatch slot 0x6610727C, modOpcodes line 1463.
Compare_Gt
Greater-than comparison
GtCy
(0,0xDD)emittedprimary of 2handler #218Currencyconfirmed_msdocs>; push Boolean result.Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Public Sub Main()
Dim a As Currency, b As Currency, c As Boolean
c = (a > b)
End Sub
Encoding, evidence and notes
Encoding: DD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DD GtCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DD_GtCy.
Handler: 0x6610C1A9, shared by 2 dispatch slots (real opcode #218). This is the primary slot. Other slots: (1,6F) GtCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x6610C1A9, dispatch slot 0x66107088, modOpcodes line 1443.
GtCy
(1,0x6F)not emitteddup of (0,DD)handler #218Currencyconfirmed_handler>; push Boolean result.Alias dispatch slot (1, 0x6F) for the canonical GtCy at (0, 0xDD); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed Cy. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Dim a As Currency, b As Currency, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding: FB 6F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C1A9, shared by 2 dispatch slots (real opcode #218). This is a duplicate slot of (0,DD) GtCy. Other slots: (0,DD) GtCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DD) GtCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C1A9, dispatch slot 0x661072D0, modOpcodes line 1444.
GtCyR8
(0,0xDE)emittedprimary of 2handler #219Currencyconfirmed_msdocs>; push Boolean.Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c > x):Bool]
Emitted when one operand of > is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency > Currency uses GtCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.
Public Sub Main()
Dim a As Currency, n As Long
If a > 2.5 Then n = 1
End Sub
Encoding, evidence and notes
Encoding: DE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DE GtCyR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DE_GtCyR8.
Handler: 0x6610C1B3, shared by 2 dispatch slots (real opcode #219). This is the primary slot. Other slots: (1,76) GtCyR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double, b As Boolean
b = (c > d)Description: draft, by claude-opus-5-5. Handler 0x6610C1B3, dispatch slot 0x6610708C, modOpcodes line 1445.
GtCyR8
(1,0x76)not emitteddup of (0,DE)handler #219Currencyconfirmed_handler>; push Boolean.Dispatch slot (1, 0x76) runs the same MSVBVM60 handler as (0,DE) GtCyR8; runtime behaviour is identical.
Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c > x):Bool]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency > non-Currency) compiles to (0,DE) GtCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB 76 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C1B3, shared by 2 dispatch slots (real opcode #219). This is a duplicate slot of (0,DE) GtCyR8. Other slots: (0,DE) GtCyR8.
Description: draft, by claude-opus-5-5. Handler 0x6610C1B3, dispatch slot 0x661072EC, modOpcodes line 1446.
GtI2
(0,0xDA)emittedprimary of 2handler #215Integerconfirmed_msdocs>; push Boolean result.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed I2. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Public Sub Main()
Dim a As Integer, n As Long
If a > 2 Then n = 1
End Sub
Encoding, evidence and notes
Encoding: DA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DA GtI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DA_GtI2.
Handler: 0x66106A94, shared by 2 dispatch slots (real opcode #215). This is the primary slot. Other slots: (1,6B) GtI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, b As Integer, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x66106A94, dispatch slot 0x6610707C, modOpcodes line 1431.
GtI2
(1,0x6B)not emitteddup of (0,DA)handler #215Integerconfirmed_handler>; push Boolean result.Alias dispatch slot (1, 0x6B) for the canonical GtI2 at (0, 0xDA); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed I2. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Dim a As Integer, b As Integer, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding: FB 6B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A94, shared by 2 dispatch slots (real opcode #215). This is a duplicate slot of (0,DA) GtI2. Other slots: (0,DA) GtI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DA) GtI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A94, dispatch slot 0x661072C0, modOpcodes line 1432.
GtI4
(0,0xDB)emittedprimary of 2handler #216Integerconfirmed_msdocs130 corpus hits>; push Boolean result.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed I4. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Public Sub Main()
Dim a As Long, n As Long
If a > 2 Then n = 1
End Sub
Encoding, evidence and notes
Encoding: DB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DB GtI4
Form1.mnuExtractURI_Click @ 0x45774C | 4577C7 DB GtI4
Form1.mnuExtractURI_Click @ 0x45774C | 457821 DB GtI4
Form1.mnuExtractURI_Click @ 0x45774C | 45782A DB GtI4
130 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DB_GtI4.
Handler: 0x66106AB0, shared by 2 dispatch slots (real opcode #216). This is the primary slot. Other slots: (1,6C) GtI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 130 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x66106AB0, dispatch slot 0x66107080, modOpcodes line 1433.
GtI4
(1,0x6C)not emitteddup of (0,DB)handler #216Integerconfirmed_handler>; push Boolean result.Alias dispatch slot (1, 0x6C) for the canonical GtI4 at (0, 0xDB); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed I4. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Dim a As Long, b As Long, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding: FB 6C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106AB0, shared by 2 dispatch slots (real opcode #216). This is a duplicate slot of (0,DB) GtI4. Other slots: (0,DB) GtI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DB) GtI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106AB0, dispatch slot 0x661072C4, modOpcodes line 1434.
GtR8
(0,0xDC)emittedprimary of 3handler #217Floating pointconfirmed_msdocs3 corpus hits>; push Boolean result.Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed R8. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Public Sub Main()
Dim a As Double, n As Long
If a > 2.5 Then n = 1
End Sub
Encoding, evidence and notes
Encoding: DC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: DC GtR8
Form2.LongHex @ 0x441B00 | 441B42 DC GtR8
Form2.Proc_4429BC @ 0x4429BC | 4429FC DC GtR8
Form2.Form_Resize @ 0x46537C | 46568E DC GtR8
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_DC_GtR8.
Handler: 0x66106AB6, shared by 3 dispatch slots (real opcode #217). This is the primary slot. Other slots: (1,6D) GtR8, (1,6E) GtR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Double, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x66106AB6, dispatch slot 0x66107084, modOpcodes line 1435.
GtR8
(1,0x6D)not emitteddup of (0,DC)handler #217Floating pointconfirmed_handler>; push Boolean result.Alias dispatch slot (1, 0x6D) for the canonical GtR8 at (0, 0xDC); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed R8. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Dim a As Double, b As Double, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding: FB 6D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106AB6, shared by 3 dispatch slots (real opcode #217). This is a duplicate slot of (0,DC) GtR8. Other slots: (0,DC) GtR8, (1,6E) GtR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DC) GtR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106AB6, dispatch slot 0x661072C8, modOpcodes line 1436.
GtR8
(1,0x6E)not emitteddup of (0,DC)handler #217Floating pointconfirmed_handler>; push Boolean result.Alias dispatch slot (1, 0x6E) for the canonical GtR8 at (0, 0xDC); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed R8. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Dim a As Double, b As Double, c As Boolean
c = (a > b)
Encoding, evidence and notes
Encoding: FB 6E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106AB6, shared by 3 dispatch slots (real opcode #217). This is a duplicate slot of (0,DC) GtR8. Other slots: (0,DC) GtR8, (1,6D) GtR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,DC) GtR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106AB6, dispatch slot 0x661072CC, modOpcodes line 1437.
GtStr
(1,0x71)emittedhandler #298Stringconfirmed_msdocs>; push Boolean result.Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:Str, b:Str] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed Str. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a > b)
End Sub
Encoding, evidence and notes
Encoding: FB 71 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB71 GtStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_71_GtStr.
Handler: 0x6610C1CB, unique to this slot (real opcode #298).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As String, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x6610C1CB, dispatch slot 0x661072D8, modOpcodes line 1439.
GtTextStr
(1,0x73)emittedhandler #300Stringconfirmed_msdocs>; push Boolean result.Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:TextStr, b:TextStr] -> [..., (a > b):I2]
Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.
Emitted for > when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a > b)
End Sub
Encoding, evidence and notes
Encoding: FB 73 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB73 GtTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_73_GtTextStr.
Handler: 0x6610C1BD, unique to this slot (real opcode #300).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x6610C1BD, dispatch slot 0x661072E0, modOpcodes line 1440.
GtTextVar
(1,0x72)emittedhandler #299Variantinferred_corpus> comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with > using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a > b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a > b)
End Sub
Encoding, evidence and notes
Encoding: FB 72 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB72 48FF GtTextVar var_B8
FB72 48FF GtTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_72_GtTextVar.
Handler: 0x6610C23A, unique to this slot (real opcode #299).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a > b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C23A, dispatch slot 0x661072DC, modOpcodes line 1448.
GtTextVarBool
(1,0x75)emittedhandler #302Variantconfirmed_msdocs> comparison (text mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with > (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v > w)), the compiler uses GtTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a > b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 75 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB75 GtTextVarBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_75_GtTextVarBool.
Handler: 0x6610C276, unique to this slot (real opcode #302).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a > b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C276, dispatch slot 0x661072E8, modOpcodes line 1442.
GtUI1
(1,0x6A)emittedhandler #296Integerconfirmed_msdocs>; push Boolean result.Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:UI1, b:UI1] -> [..., (a > b):I2]
Emitted for > when both operands are statically typed UI1. Other type pairings select the matching suffix variant (GtI2/GtI4/GtR8/GtStr/GtVar).
Public Sub Main()
Dim a As Byte, b As Byte, c As Boolean
c = (a > b)
End Sub
Encoding, evidence and notes
Encoding: FB 6A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB6A GtUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_6A_GtUI1.
Handler: 0x6610C196, unique to this slot (real opcode #296).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x6610C196, dispatch slot 0x661072BC, modOpcodes line 1438.
GtVar
(1,0x70)emittedhandler #297Variantinferred_corpus9 corpus hits>; push Boolean result.Pops two VBA Variant operands b and a (top is b), pushes (a > b) as a I2 result.
Stack: [..., a:Var, b:Var] -> [..., (a > b):I2]
Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.
Emitted for > when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a > b)
End Sub
Encoding, evidence and notes
Encoding: FB 70 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB70 48FF GtVar var_B8
Form1.Form_Load @ 0x479DC0 | 47AF25 FB70 10FF GtVar var_F0
Form1.Form_Load @ 0x479DC0 | 47AF4D FB70 B0FE GtVar var_150
fso.Proc_467FC4 @ 0x467FC4 | 4680E7 FB70 34FF GtVar var_CC
9 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_70_GtVar.
Handler: 0x66106B0D, unique to this slot (real opcode #297).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Boolean
c = (a > b)Description: draft, by claude-opus-4.7. Handler 0x66106B0D, dispatch slot 0x661072D4, modOpcodes line 1447.
GtVarBool
(1,0x74)emittedhandler #301Variantconfirmed_msdocs119 corpus hits> comparison (binary mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with > (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v > w)), the compiler uses GtVar instead, which produces a Variant (possibly Null).
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a > b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 74 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB74 GtVarBool
Form1.looksEscaped @ 0x449B64 | 449BB2 FB74 GtVarBool
Form1.looksEscaped @ 0x449B64 | 449BE3 FB74 GtVarBool
Form1.looksEscaped @ 0x449B64 | 449C15 FB74 GtVarBool
119 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_74_GtVarBool.
Handler: 0x6610C282, unique to this slot (real opcode #301).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 119 occurrence(s) in PDFStreamDumper_p.exe.
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a > b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C282, dispatch slot 0x661072E4, modOpcodes line 1441.
Compare_Is
Object identity (Is operator)
Is
(1,0xD2)emittedhandler #335Object / COMconfirmed_msdocs68 corpus hitsIs operator: compare two object references for identity; push Boolean.Object identity test (Is operator). Pops two object pointers, pushes Boolean indicating pointer equality (not equality of object contents).
Stack: [..., a:Pr, b:Pr] -> [..., (a Is b):Bool]
Nothing Is Nothing evaluates True; mixed Object/Nothing comparison is permitted.
Emitted for a Is b and a Is Nothing. Not a Is Nothing adds NotI4.
Public Sub Main()
Dim a As Object, n As Long
Select Case a Is Nothing
End Select
End Sub
Encoding, evidence and notes
Encoding: FB D2 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBD2 Is
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4613B9 FBD2 Is
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A82A FBD2 Is
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45C9D6 FBD2 Is
68 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_D2_Is.
Handler: 0x6610616D, unique to this slot (real opcode #335).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 68 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Object, n As Long
If a Is Nothing Then n = 1Description: draft, by claude-opus-5-5. Handler 0x6610616D, dispatch slot 0x6610745C, modOpcodes line 455.
Compare_Le
Less-or-equal comparison
LeCy
(0,0xD8)emittedprimary of 2handler #213Currencyconfirmed_msdocs<=; push Boolean result.Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Public Sub Main()
Dim a As Currency, b As Currency, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: D8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D8 LeCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D8_LeCy.
Handler: 0x6610C170, shared by 2 dispatch slots (real opcode #213). This is the primary slot. Other slots: (1,48) LeCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x6610C170, dispatch slot 0x66107074, modOpcodes line 1520.
LeCy
(1,0x48)not emitteddup of (0,D8)handler #213Currencyconfirmed_handler<=; push Boolean result.Alias dispatch slot (1, 0x48) for the canonical LeCy at (0, 0xD8); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Dim a As Currency, b As Currency, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding: FB 48 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C170, shared by 2 dispatch slots (real opcode #213). This is a duplicate slot of (0,D8) LeCy. Other slots: (0,D8) LeCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D8) LeCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C170, dispatch slot 0x66107234, modOpcodes line 1521.
LeCyR8
(0,0xD9)emittedprimary of 2handler #214Currencyconfirmed_msdocs<=; push Boolean.Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <= x):Bool]
Emitted when one operand of <= is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency <= Currency uses LeCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.
Public Sub Main()
Dim a As Currency, b As Single, c As Variant
c = a <= b
End Sub
Encoding, evidence and notes
Encoding: D9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D9 LeCyR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D9_LeCyR8.
Handler: 0x6610C17A, shared by 2 dispatch slots (real opcode #214). This is the primary slot. Other slots: (1,4F) LeCyR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double, b As Boolean
b = (c <= d)Description: draft, by claude-opus-5-5. Handler 0x6610C17A, dispatch slot 0x66107078, modOpcodes line 1522.
LeCyR8
(1,0x4F)not emitteddup of (0,D9)handler #214Currencyconfirmed_handler<=; push Boolean.Dispatch slot (1, 0x4F) runs the same MSVBVM60 handler as (0,D9) LeCyR8; runtime behaviour is identical.
Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <= x):Bool]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency <= non-Currency) compiles to (0,D9) LeCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB 4F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C17A, shared by 2 dispatch slots (real opcode #214). This is a duplicate slot of (0,D9) LeCyR8. Other slots: (0,D9) LeCyR8.
Description: draft, by claude-opus-5-5. Handler 0x6610C17A, dispatch slot 0x66107250, modOpcodes line 1523.
LeI2
(0,0xD5)emittedprimary of 2handler #210Integerconfirmed_msdocs8 corpus hits<=; push Boolean result.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed I2. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: D5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D5 LeI2
CFunc.isTextRange @ 0x44183C | 44184D D5 LeI2
CFunc.isTextRange @ 0x44183C | 441862 D5 LeI2
CFunc.isTextRange @ 0x44183C | 441877 D5 LeI2
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D5_LeI2.
Handler: 0x66106A5C, shared by 2 dispatch slots (real opcode #210). This is the primary slot. Other slots: (1,44) LeI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x66106A5C, dispatch slot 0x66107068, modOpcodes line 1513.
LeI2
(1,0x44)not emitteddup of (0,D5)handler #210Integerconfirmed_handler<=; push Boolean result.Alias dispatch slot (1, 0x44) for the canonical LeI2 at (0, 0xD5); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed I2. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Dim a As Integer, b As Integer, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding: FB 44 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A5C, shared by 2 dispatch slots (real opcode #210). This is a duplicate slot of (0,D5) LeI2. Other slots: (0,D5) LeI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D5) LeI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A5C, dispatch slot 0x66107224, modOpcodes line 1514.
LeI4
(0,0xD6)emittedprimary of 2handler #211Integerconfirmed_msdocs3 corpus hits<=; push Boolean result.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed I4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Public Sub Main()
Dim a As Long, b As Long, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: D6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D6 LeI4
CPdfParser.ParseFile @ 0x471F38 | 472129 D6 LeI4
CPdfParser.ParseFile @ 0x471F38 | 4721F0 D6 LeI4
CPdfParser.ParseFile @ 0x471F38 | 4723E0 D6 LeI4
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D6_LeI4.
Handler: 0x6610C167, shared by 2 dispatch slots (real opcode #211). This is the primary slot. Other slots: (1,45) LeI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x6610C167, dispatch slot 0x6610706C, modOpcodes line 1515.
LeI4
(1,0x45)not emitteddup of (0,D6)handler #211Integerconfirmed_handler<=; push Boolean result.Alias dispatch slot (1, 0x45) for the canonical LeI4 at (0, 0xD6); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed I4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Dim a As Long, b As Long, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding: FB 45 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C167, shared by 2 dispatch slots (real opcode #211). This is a duplicate slot of (0,D6) LeI4. Other slots: (0,D6) LeI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D6) LeI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C167, dispatch slot 0x66107228, modOpcodes line 1516.
LeR4
(1,0x46)not emitteddup of (0,D7)handler #212Floating pointconfirmed_msdocs<=; push Boolean result.Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed R4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Dim a As Single, b As Single, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding: FB 46 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A78, shared by 3 dispatch slots (real opcode #212). This is a duplicate slot of (0,D7) LeR8. Other slots: (0,D7) LeR8, (1,47) LeR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D7) LeR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A78, dispatch slot 0x6610722C, modOpcodes line 1517.
LeR4
(1,0x47)not emitteddup of (0,D7)handler #212Floating pointconfirmed_handler<=; push Boolean result.Alias dispatch slot (1, 0x47) for the canonical LeR4 at (1, 0x46); semantics are identical.
Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed R4. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Dim a As Single, b As Single, c As Boolean
c = (a <= b)
Encoding, evidence and notes
Encoding: FB 47 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A78, shared by 3 dispatch slots (real opcode #212). This is a duplicate slot of (0,D7) LeR8. Other slots: (0,D7) LeR8, (1,46) LeR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D7) LeR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A78, dispatch slot 0x66107230, modOpcodes line 1518.
LeR8
(0,0xD7)emittedprimary of 3handler #212Floating pointconfirmed_msdocs<=; push Boolean result.Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed R8. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Public Sub Main()
Dim a As Date, b As Date, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: D7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D7 LeR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D7_LeR8.
Handler: 0x66106A78, shared by 3 dispatch slots (real opcode #212). This is the primary slot. Other slots: (1,46) LeR4, (1,47) LeR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, b As Double, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x66106A78, dispatch slot 0x66107070, modOpcodes line 1519.
LeStr
(1,0x4A)emittedhandler #277Stringconfirmed_msdocs<=; push Boolean result.Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:Str, b:Str] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed Str. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: FB 4A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4A LeStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4A_LeStr.
Handler: 0x6610C192, unique to this slot (real opcode #277).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As String, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x6610C192, dispatch slot 0x6610723C, modOpcodes line 1524.
LeTextStr
(1,0x4C)emittedhandler #279Stringconfirmed_msdocs<=; push Boolean result.Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:TextStr, b:TextStr] -> [..., (a <= b):I2]
Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.
Emitted for <= when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: FB 4C (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4C LeTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4C_LeTextStr.
Handler: 0x6610C184, unique to this slot (real opcode #279).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x6610C184, dispatch slot 0x66107244, modOpcodes line 1525.
LeTextVar
(1,0x4B)emittedhandler #278Variantinferred_corpus<= comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with <= using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a <= b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: FB 4B (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB4B 48FF LeTextVar var_B8
FB4B 48FF LeTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4B_LeTextVar.
Handler: 0x6610C213, unique to this slot (real opcode #278).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <= b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C213, dispatch slot 0x66107240, modOpcodes line 1528.
LeTextVarBool
(1,0x4E)emittedhandler #281Variantconfirmed_msdocs<= comparison (text mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with <= (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <= w)), the compiler uses LeTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a <= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 4E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4E LeTextVarBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4E_LeTextVarBool.
Handler: 0x6610C24F, unique to this slot (real opcode #281).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a <= b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C24F, dispatch slot 0x6610724C, modOpcodes line 1527.
LeUI1
(1,0x43)emittedhandler #275Integerconfirmed_msdocs2 corpus hits<=; push Boolean result.Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a <= b) as a I2 result.
Stack: [..., a:UI1, b:UI1] -> [..., (a <= b):I2]
Emitted for <= when both operands are statically typed UI1. Other type pairings select the matching suffix variant (LeI2/LeI4/LeR8/LeStr/LeVar).
Public Sub Main()
Dim a As Byte, b As Byte, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: FB 43 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB43 LeUI1
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658E8 FB43 LeUI1
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465911 FB43 LeUI1
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_43_LeUI1.
Handler: 0x6610C151, unique to this slot (real opcode #275).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Byte, b As Byte, c As Boolean
c = (a <= b)Description: draft, by claude-opus-4.7. Handler 0x6610C151, dispatch slot 0x66107220, modOpcodes line 1512.
LeVar
(1,0x49)emittedhandler #276Variantinferred_corpus<= comparison (binary); result Variant in a temporary.Pops two Variants, compares them with <= using binary string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a <= b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <= b)
End Sub
Encoding, evidence and notes
Encoding: FB 49 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB49 48FF LeVar var_B8
FB49 48FF LeVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_49_LeVar.
Handler: 0x6610C21F, unique to this slot (real opcode #276).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <= b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C21F, dispatch slot 0x66107238, modOpcodes line 1529.
LeVarBool
(1,0x4D)emittedhandler #280Variantconfirmed_msdocs3 corpus hits<= comparison (binary mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with <= (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <= w)), the compiler uses LeVar instead, which produces a Variant (possibly Null).
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a <= b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 4D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB4D LeVarBool
fso.Proc_467FC4 @ 0x467FC4 | 4682BE FB4D LeVarBool
CFunc.Proc_47817C @ 0x47817C | 47822F FB4D LeVarBool
b64.Proc_450DCC @ 0x450DCC | 450E04 FB4D LeVarBool
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_4D_LeVarBool.
Handler: 0x66106B54, unique to this slot (real opcode #280).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a <= b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x66106B54, dispatch slot 0x66107248, modOpcodes line 1526.
Compare_Like
Like-pattern comparison
LikeStr
(1,0x7E)emittedhandler #304Stringconfirmed_msdocsPattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).
Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]
Option Compare Binary vs Option Compare Text selects case sensitivity.
Emitted for the Like operator; Variant operand variant selected by argument type.
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding: FB 7E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB7E LikeStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_7E_LikeStr.
Handler: 0x6610C365, unique to this slot (real opcode #304).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim s As String, ok As Boolean
ok = (s Like "abc*")Description: draft, by claude-opus-4.7. Handler 0x6610C365, dispatch slot 0x6610730C, modOpcodes line 1550.
LikeTextStr
(1,0x80)emittedhandler #306Stringconfirmed_msdocsLike between two Strings under Option Compare Text; push Boolean.Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).
Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]
Option Compare Binary vs Option Compare Text selects case sensitivity.
Emitted for s Like pattern with String operands in a module that has Option Compare Text (case-insensitive matching). Without it, LikeStr (1,7E) is used.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding: FB 80 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB80 LikeTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_80_LikeTextStr.
Handler: 0x6610C351, unique to this slot (real opcode #306).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim s As String, b As Boolean
s = "ABC"
b = (s Like "a*")
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C351, dispatch slot 0x66107314, modOpcodes line 1551.
LikeTextVar
(1,0x7F)emittedhandler #305Variantinferred_corpusLike comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with Like using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a Like b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding: FB 7F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB7F 48FF LikeTextVar var_B8
FB7F 48FF LikeTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_7F_LikeTextVar.
Handler: 0x6610C369, unique to this slot (real opcode #305).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a Like b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C369, dispatch slot 0x66107310, modOpcodes line 1555.
LikeTextVarBool
(1,0x82)not emittedhandler #308Variantconfirmed_msdocsLike (text mode) with Variant operands, Boolean form; never emitted.Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).
Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]
Option Compare Binary vs Option Compare Text selects case sensitivity.
Not emitted by VB6 SP6: If v Like p Then with Variants (with or without Option Compare Text) compiles to LikeVar / LikeTextVar followed by a Boolean conversion; no ...VarBool form of Like was observed.
Encoding, evidence and notes
Encoding: FB 82 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C38A, unique to this slot (real opcode #308).
Description: draft, by claude-opus-5-5. Handler 0x6610C38A, dispatch slot 0x6610731C, modOpcodes line 1553.
LikeVar
(1,0x7D)emittedhandler #303Variantinferred_corpus2 corpus hitsLike with a Variant operand; result Variant in a temporary.Pops two Variants, matches the first against the pattern in the second (Null if either is Null) and writes the result Variant to temporary %a.
Stack: [..., s:Var, p:Var] -> [..., r:Var]
Emitted for Like when either operand is a Variant, both as a value and as an If condition (no ...Bool form was observed). String operands use LikeStr (1,7E).
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a Like b)
End Sub
Encoding, evidence and notes
Encoding: FB 7D (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB7D 48FF LikeVar var_B8
fso.Proc_45D698 @ 0x45D698 | 45D6D6 FB7D 44FF LikeVar var_BC
modEscapes.Proc_472E38 @ 0x472E38 | 47319B FB7D 18FF LikeVar var_E8
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_7D_LikeVar.
Handler: 0x6610C386, unique to this slot (real opcode #303).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, b As Boolean
v = "abc"
b = (v Like "a*")Description: draft, by claude-opus-5-5. Handler 0x6610C386, dispatch slot 0x66107308, modOpcodes line 1554.
LikeVarBool
(1,0x81)not emittedhandler #307Variantconfirmed_msdocsLike with Variant operands, Boolean form; never emitted.Pattern match (Like operator). Pops pattern:Str and text:Str, pushes Boolean indicating whether text matches pattern under VB6 wildcard rules (?, *, #, [abc], [!abc]).
Stack: [..., text:Str, pattern:Str] -> [..., result:Bool]
Option Compare Binary vs Option Compare Text selects case sensitivity.
Not emitted by VB6 SP6: If v Like p Then compiles to LikeVar (1,7D) plus a Boolean conversion.
Encoding, evidence and notes
Encoding: FB 81 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C39C, unique to this slot (real opcode #307).
Description: draft, by claude-opus-5-5. Handler 0x6610C39C, dispatch slot 0x66107318, modOpcodes line 1552.
Compare_Lt
Less-than comparison
LtCy
(0,0xD3)emittedprimary of 2handler #208Currencyconfirmed_msdocs<; push Boolean result.Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Public Sub Main()
Dim a As Currency, b As Currency, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: D3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D3 LtCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D3_LtCy.
Handler: 0x6610C12B, shared by 2 dispatch slots (real opcode #208). This is the primary slot. Other slots: (1,62) LtCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x6610C12B, dispatch slot 0x66107060, modOpcodes line 1539.
LtCy
(1,0x62)not emitteddup of (0,D3)handler #208Currencyconfirmed_handler<; push Boolean result.Alias dispatch slot (1, 0x62) for the canonical LtCy at (0, 0xD3); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed Cy. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Dim a As Currency, b As Currency, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding: FB 62 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C12B, shared by 2 dispatch slots (real opcode #208). This is a duplicate slot of (0,D3) LtCy. Other slots: (0,D3) LtCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D3) LtCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C12B, dispatch slot 0x6610729C, modOpcodes line 1540.
LtCyR8
(0,0xD4)emittedprimary of 2handler #209Currencyconfirmed_msdocs<; push Boolean.Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c < x):Bool]
Emitted when one operand of < is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency < Currency uses LtCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.
Public Sub Main()
Dim a As Currency, b As Single, c As Variant
c = a < b
End Sub
Encoding, evidence and notes
Encoding: D4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D4 LtCyR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D4_LtCyR8.
Handler: 0x6610C135, shared by 2 dispatch slots (real opcode #209). This is the primary slot. Other slots: (1,69) LtCyR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double, b As Boolean
b = (c < d)Description: draft, by claude-opus-5-5. Handler 0x6610C135, dispatch slot 0x66107064, modOpcodes line 1541.
LtCyR8
(1,0x69)not emitteddup of (0,D4)handler #209Currencyconfirmed_handler<; push Boolean.Dispatch slot (1, 0x69) runs the same MSVBVM60 handler as (0,D4) LtCyR8; runtime behaviour is identical.
Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c < x):Bool]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency < non-Currency) compiles to (0,D4) LtCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB 69 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C135, shared by 2 dispatch slots (real opcode #209). This is a duplicate slot of (0,D4) LtCyR8. Other slots: (0,D4) LtCyR8.
Description: draft, by claude-opus-5-5. Handler 0x6610C135, dispatch slot 0x661072B8, modOpcodes line 1542.
LtI2
(0,0xD0)emittedprimary of 2handler #205Integerconfirmed_msdocs<; push Boolean result.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed I2. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: D0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D0 LtI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D0_LtI2.
Handler: 0x66106A26, shared by 2 dispatch slots (real opcode #205). This is the primary slot. Other slots: (1,5E) LtI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, b As Integer, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x66106A26, dispatch slot 0x66107054, modOpcodes line 1532.
LtI2
(1,0x5E)not emitteddup of (0,D0)handler #205Integerconfirmed_handler<; push Boolean result.Alias dispatch slot (1, 0x5E) for the canonical LtI2 at (0, 0xD0); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed I2. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Dim a As Integer, b As Integer, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding: FB 5E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A26, shared by 2 dispatch slots (real opcode #205). This is a duplicate slot of (0,D0) LtI2. Other slots: (0,D0) LtI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D0) LtI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A26, dispatch slot 0x6610728C, modOpcodes line 1533.
LtI4
(0,0xD1)emittedprimary of 2handler #206Integerconfirmed_msdocs34 corpus hits<; push Boolean result.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed I4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Public Sub Main()
Dim a As Long, b As Long, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: D1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D1 LtI4
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EEDD D1 LtI4
Form1.parser_NewStream @ 0x472690 | 4726FA D1 LtI4
Form1.GetActiveData @ 0x464174 | 46428A D1 LtI4
34 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D1_LtI4.
Handler: 0x66106A2D, shared by 2 dispatch slots (real opcode #206). This is the primary slot. Other slots: (1,5F) LtI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 34 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x66106A2D, dispatch slot 0x66107058, modOpcodes line 1534.
LtI4
(1,0x5F)not emitteddup of (0,D1)handler #206Integerconfirmed_handler<; push Boolean result.Alias dispatch slot (1, 0x5F) for the canonical LtI4 at (0, 0xD1); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed I4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Dim a As Long, b As Long, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding: FB 5F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A2D, shared by 2 dispatch slots (real opcode #206). This is a duplicate slot of (0,D1) LtI4. Other slots: (0,D1) LtI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D1) LtI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A2D, dispatch slot 0x66107290, modOpcodes line 1535.
LtR4
(1,0x60)not emitteddup of (0,D2)handler #207Floating pointconfirmed_msdocs<; push Boolean result.Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed R4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Dim a As Single, b As Single, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding: FB 60 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A48, shared by 3 dispatch slots (real opcode #207). This is a duplicate slot of (0,D2) LtR8. Other slots: (0,D2) LtR8, (1,61) LtR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D2) LtR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A48, dispatch slot 0x66107294, modOpcodes line 1536.
LtR4
(1,0x61)not emitteddup of (0,D2)handler #207Floating pointconfirmed_handler<; push Boolean result.Alias dispatch slot (1, 0x61) for the canonical LtR4 at (1, 0x60); semantics are identical.
Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed R4. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Dim a As Single, b As Single, c As Boolean
c = (a < b)
Encoding, evidence and notes
Encoding: FB 61 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106A48, shared by 3 dispatch slots (real opcode #207). This is a duplicate slot of (0,D2) LtR8. Other slots: (0,D2) LtR8, (1,60) LtR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,D2) LtR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106A48, dispatch slot 0x66107298, modOpcodes line 1537.
LtR8
(0,0xD2)emittedprimary of 3handler #207Floating pointconfirmed_msdocs6 corpus hits<; push Boolean result.Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed R8. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Public Sub Main()
Dim a As Date, b As Date, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: D2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: D2 LtR8
Form1.Form_Resize @ 0x474F3C | 474FA1 D2 LtR8
Form1.Form_Resize @ 0x474F3C | 474FC8 D2 LtR8
Form2.Proc_4429BC @ 0x4429BC | 442A0D D2 LtR8
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_D2_LtR8.
Handler: 0x66106A48, shared by 3 dispatch slots (real opcode #207). This is the primary slot. Other slots: (1,60) LtR4, (1,61) LtR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Double, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x66106A48, dispatch slot 0x6610705C, modOpcodes line 1538.
LtStr
(1,0x64)emittedhandler #291Stringconfirmed_msdocs<; push Boolean result.Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:Str, b:Str] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed Str. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: FB 64 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB64 LtStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_64_LtStr.
Handler: 0x6610C14D, unique to this slot (real opcode #291).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As String, b As String, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x6610C14D, dispatch slot 0x661072A4, modOpcodes line 1543.
LtTextStr
(1,0x66)emittedhandler #293Stringconfirmed_msdocs<; push Boolean result.Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:TextStr, b:TextStr] -> [..., (a < b):I2]
Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.
Emitted for < when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: FB 66 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB66 LtTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_66_LtTextStr.
Handler: 0x6610C13F, unique to this slot (real opcode #293).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x6610C13F, dispatch slot 0x661072AC, modOpcodes line 1544.
LtTextVar
(1,0x65)emittedhandler #292Variantinferred_corpus< comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with < using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a < b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: FB 65 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB65 48FF LtTextVar var_B8
FB65 48FF LtTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_65_LtTextVar.
Handler: 0x6610C223, unique to this slot (real opcode #292).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a < b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C223, dispatch slot 0x661072A8, modOpcodes line 1547.
LtTextVarBool
(1,0x68)emittedhandler #295Variantconfirmed_msdocs< comparison (text mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with < (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v < w)), the compiler uses LtTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a < b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 68 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB68 LtTextVarBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_68_LtTextVarBool.
Handler: 0x6610C256, unique to this slot (real opcode #295).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a < b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C256, dispatch slot 0x661072B4, modOpcodes line 1546.
LtUI1
(1,0x5D)emittedhandler #289Integerconfirmed_msdocs<; push Boolean result.Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:UI1, b:UI1] -> [..., (a < b):I2]
Emitted for < when both operands are statically typed UI1. Other type pairings select the matching suffix variant (LtI2/LtI4/LtR8/LtStr/LtVar).
Public Sub Main()
Dim a As Byte, b As Byte, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: FB 5D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB5D LtUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_5D_LtUI1.
Handler: 0x6610C118, unique to this slot (real opcode #289).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x6610C118, dispatch slot 0x66107288, modOpcodes line 1531.
LtVar
(1,0x63)emittedhandler #290Variantinferred_corpus4 corpus hits<; push Boolean result.Pops two VBA Variant operands b and a (top is b), pushes (a < b) as a I2 result.
Stack: [..., a:Var, b:Var] -> [..., (a < b):I2]
Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.
Emitted for < when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a < b)
End Sub
Encoding, evidence and notes
Encoding: FB 63 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB63 48FF LtVar var_B8
fso.Proc_467FC4 @ 0x467FC4 | 4680F4 FB63 BCFE LtVar var_144
frmReplace.cmdFindNext_Click @ 0x459BD4 | 459D30 FB63 00FF LtVar var_100
CApplyFilters.Proc_44AEEC @ 0x44AEEC | 44AF6A FB63 F8FE LtVar var_108
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_63_LtVar.
Handler: 0x66106B04, unique to this slot (real opcode #290).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Boolean
c = (a < b)Description: draft, by claude-opus-4.7. Handler 0x66106B04, dispatch slot 0x661072A0, modOpcodes line 1548.
LtVarBool
(1,0x67)emittedhandler #294Variantconfirmed_msdocs21 corpus hits< comparison (binary mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with < (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v < w)), the compiler uses LtVar instead, which produces a Variant (possibly Null).
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a < b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 67 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB67 LtVarBool
fso.Proc_467FC4 @ 0x467FC4 | 468179 FB67 LtVarBool
fso.Proc_467FC4 @ 0x467FC4 | 468276 FB67 LtVarBool
fso.Proc_44F3C8 @ 0x44F3C8 | 44F493 FB67 LtVarBool
21 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_67_LtVarBool.
Handler: 0x6610C262, unique to this slot (real opcode #294).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 21 occurrence(s) in PDFStreamDumper_p.exe.
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a < b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C262, dispatch slot 0x661072B0, modOpcodes line 1545.
Compare_Ne
Not-equal comparison
NeCy
(0,0xCE)emittedprimary of 2handler #203Currencyconfirmed_msdocs<>; push Boolean result.Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed Cy. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Public Sub Main()
Dim a As Currency, b As Currency, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: CE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CE NeCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CE_NeCy.
Handler: 0x6610C0FD, shared by 2 dispatch slots (real opcode #203). This is the primary slot. Other slots: (1,3B) NeCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Boolean
c = (a <> b)Description: draft, by claude-opus-4.7. Handler 0x6610C0FD, dispatch slot 0x6610704C, modOpcodes line 1501.
NeCy
(1,0x3B)not emitteddup of (0,CE)handler #203Currencyconfirmed_handler<>; push Boolean result.Alias dispatch slot (1, 0x3B) for the canonical NeCy at (0, 0xCE); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:Cy, b:Cy] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed Cy. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Dim a As Currency, b As Currency, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding: FB 3B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C0FD, shared by 2 dispatch slots (real opcode #203). This is a duplicate slot of (0,CE) NeCy. Other slots: (0,CE) NeCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CE) NeCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610C0FD, dispatch slot 0x66107200, modOpcodes line 1502.
NeCyR8
(0,0xCF)emittedprimary of 2handler #204Currencyconfirmed_msdocs<>; push Boolean.Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <> x):Bool]
Emitted when one operand of <> is Currency and the other is Integer, Long, Single, Double or a numeric literal (Currency <> Currency uses NeCy). If the Currency is on the right, the compiler swaps the operands and mirrors the operator: n <= c compiles to GeCyR8.
Public Sub Main()
Dim a As Currency, b As Single, c As Variant
c = a <> b
End Sub
Encoding, evidence and notes
Encoding: CF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CF NeCyR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CF_NeCyR8.
Handler: 0x6610C107, shared by 2 dispatch slots (real opcode #204). This is the primary slot. Other slots: (1,42) NeCyR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, d As Double, b As Boolean
b = (c <> d)Description: draft, by claude-opus-5-5. Handler 0x6610C107, dispatch slot 0x66107050, modOpcodes line 1503.
NeCyR8
(1,0x42)not emitteddup of (0,CF)handler #204Currencyconfirmed_handler<>; push Boolean.Dispatch slot (1, 0x42) runs the same MSVBVM60 handler as (0,CF) NeCyR8; runtime behaviour is identical.
Pops the Currency operand and compares it with the floating-point operand (ST0), pushing the Boolean result (-1/0).
Stack: [..., c:Cy, x:R8 (ST0)] -> [..., (c <> x):Bool]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency <> non-Currency) compiles to (0,CF) NeCyR8 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB 42 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C107, shared by 2 dispatch slots (real opcode #204). This is a duplicate slot of (0,CF) NeCyR8. Other slots: (0,CF) NeCyR8.
Description: draft, by claude-opus-5-5. Handler 0x6610C107, dispatch slot 0x6610721C, modOpcodes line 1504.
NeI2
(0,0xCB)emittedprimary of 3handler #200Integerconfirmed_msdocs6 corpus hits<>; push Boolean result.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:I2, b:I2] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed I2. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: CB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CB NeI2
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAA1 CB NeI2
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAB6 CB NeI2
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EACC CB NeI2
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CB_NeI2.
Handler: 0x661069D1, shared by 3 dispatch slots (real opcode #200). This is the primary slot. Other slots: (1,36) NeUI1, (1,37) NeUI1.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Boolean
c = (a <> b)(1,0x36) NeUI1, (1,0x37) NeUI1
Description: draft, by claude-opus-4.7. Handler 0x661069D1, dispatch slot 0x66107040, modOpcodes line 1495.
NeI4
(0,0xCC)emittedprimary of 2handler #201Integerconfirmed_msdocs55 corpus hits<>; push Boolean result.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed I4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Public Sub Main()
Dim a As Long, b As Long, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: CC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CC NeI4
Form1.mnuDebugBreakAtStream_Click @ 0x44802C | 4480AB CC NeI4
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4614C9 CC NeI4
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B29D CC NeI4
55 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CC_NeI4.
Handler: 0x661069E9, shared by 2 dispatch slots (real opcode #201). This is the primary slot. Other slots: (1,38) NeI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 55 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Boolean
c = (a <> b)Description: draft, by claude-opus-4.7. Handler 0x661069E9, dispatch slot 0x66107044, modOpcodes line 1496.
NeI4
(1,0x38)not emitteddup of (0,CC)handler #201Integerconfirmed_handler<>; push Boolean result.Alias dispatch slot (1, 0x38) for the canonical NeI4 at (0, 0xCC); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:I4, b:I4] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed I4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Dim a As Long, b As Long, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding: FB 38 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069E9, shared by 2 dispatch slots (real opcode #201). This is a duplicate slot of (0,CC) NeI4. Other slots: (0,CC) NeI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CC) NeI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069E9, dispatch slot 0x661071F4, modOpcodes line 1497.
NeR4
(1,0x39)not emitteddup of (0,CD)handler #202Floating pointconfirmed_msdocs<>; push Boolean result.Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed R4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Dim a As Single, b As Single, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding: FB 39 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069FF, shared by 3 dispatch slots (real opcode #202). This is a duplicate slot of (0,CD) NeR8. Other slots: (0,CD) NeR8, (1,3A) NeR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CD) NeR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069FF, dispatch slot 0x661071F8, modOpcodes line 1498.
NeR4
(1,0x3A)not emitteddup of (0,CD)handler #202Floating pointconfirmed_handler<>; push Boolean result.Alias dispatch slot (1, 0x3A) for the canonical NeR4 at (1, 0x39); semantics are identical.
Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:R4, b:R4] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed R4. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Dim a As Single, b As Single, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding: FB 3A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069FF, shared by 3 dispatch slots (real opcode #202). This is a duplicate slot of (0,CD) NeR8. Other slots: (0,CD) NeR8, (1,39) NeR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CD) NeR8 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069FF, dispatch slot 0x661071FC, modOpcodes line 1499.
NeR8
(0,0xCD)emittedprimary of 3handler #202Floating pointconfirmed_msdocs<>; push Boolean result.Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:R8, b:R8] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed R8. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Public Sub Main()
Dim a As Date, b As Date, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: CD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: CD NeR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_CD_NeR8.
Handler: 0x661069FF, shared by 3 dispatch slots (real opcode #202). This is the primary slot. Other slots: (1,39) NeR4, (1,3A) NeR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, b As Double, c As Boolean
c = (a <> b)Description: draft, by claude-opus-4.7. Handler 0x661069FF, dispatch slot 0x66107048, modOpcodes line 1500.
NeStr
(1,0x3D)emittedhandler #270Stringconfirmed_msdocs16 corpus hits<>; push Boolean result.Pops two BSTR (VB6 String) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:Str, b:Str] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed Str. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: FB 3D (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB3D NeStr
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DADC FB3D NeStr
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CB5F FB3D NeStr
Form1.mnuSaveAllRaw_Click @ 0x462368 | 46245A FB3D NeStr
16 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3D_NeStr.
Handler: 0x66106A06, unique to this slot (real opcode #270).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As String, c As Boolean
c = (a <> b)Description: draft, by claude-opus-4.7. Handler 0x66106A06, dispatch slot 0x66107208, modOpcodes line 1505.
NeTextStr
(1,0x3F)emittedhandler #272Stringconfirmed_msdocs<>; push Boolean result.Pops two String comparison in Text mode (case-insensitive, locale-aware) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:TextStr, b:TextStr] -> [..., (a <> b):I2]
Text-mode comparison uses the LCID-aware string collation (case-insensitive, locale-respecting) selected by Option Compare Text.
Emitted for <> when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Option Compare Text
Public Sub Main()
Dim a As String, b As String, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: FB 3F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB3F NeTextStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3F_NeTextStr.
Handler: 0x6610C111, unique to this slot (real opcode #272).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Dim a As String, b As String, c As Boolean
c = (a <> b)Description: draft, by claude-opus-4.7. Handler 0x6610C111, dispatch slot 0x66107210, modOpcodes line 1506.
NeTextVar
(1,0x3E)emittedhandler #271Variantinferred_corpus<> comparison (case-insensitive (Option Compare Text)); result Variant in a temporary.Pops two Variants, compares them with <> using case-insensitive (Option Compare Text) string comparison when both are strings, and writes the result (Boolean, or Null if either operand is Null) as a Variant into the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when a Variant comparison result is kept as a value (c = (a <> b)). Inside If/While conditions the compiler uses the ...VarBool form, which pushes a plain Boolean. Requires Option Compare Text in the module.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: FB 3E (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB3E 48FF NeTextVar var_B8
FB3E 48FF NeTextVar var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3E_NeTextVar.
Handler: 0x6610C241, unique to this slot (real opcode #271).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <> b)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C241, dispatch slot 0x6610720C, modOpcodes line 1510.
NeTextVarBool
(1,0x41)emittedhandler #274Variantconfirmed_msdocs<> comparison (text mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with <> (text (case-insensitive, Option Compare Text) string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <> w)), the compiler uses NeTextVar instead, which produces a Variant (possibly Null). Requires Option Compare Text.
Option Compare Text
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a <> b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 41 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB41 NeTextVarBool
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_41_NeTextVarBool.
Handler: 0x6610C286, unique to this slot (real opcode #274).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Option Compare Text
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a <> b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C286, dispatch slot 0x66107218, modOpcodes line 1508.
NeUI1
(1,0x36)not emitteddup of (0,CB)handler #200Integerconfirmed_msdocs<>; push Boolean result.Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:UI1, b:UI1] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed UI1. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Dim a As Byte, b As Byte, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding: FB 36 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069D1, shared by 3 dispatch slots (real opcode #200). This is a duplicate slot of (0,CB) NeI2. Other slots: (0,CB) NeI2, (1,37) NeUI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CB) NeI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069D1, dispatch slot 0x661071EC, modOpcodes line 1493.
NeUI1
(1,0x37)not emitteddup of (0,CB)handler #200Integerconfirmed_handler<>; push Boolean result.Alias dispatch slot (1, 0x37) for the canonical NeUI1 at (1, 0x36); semantics are identical.
Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:UI1, b:UI1] -> [..., (a <> b):I2]
Emitted for <> when both operands are statically typed UI1. Other type pairings select the matching suffix variant (NeI2/NeI4/NeR8/NeStr/NeVar).
Dim a As Byte, b As Byte, c As Boolean
c = (a <> b)
Encoding, evidence and notes
Encoding: FB 37 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661069D1, shared by 3 dispatch slots (real opcode #200). This is a duplicate slot of (0,CB) NeI2. Other slots: (0,CB) NeI2, (1,36) NeUI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,CB) NeI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x661069D1, dispatch slot 0x661071F0, modOpcodes line 1494.
NeVar
(1,0x3C)emittedhandler #269Variantinferred_corpus3 corpus hits<>; push Boolean result.Pops two VBA Variant operands b and a (top is b), pushes (a <> b) as a I2 result.
Stack: [..., a:Var, b:Var] -> [..., (a <> b):I2]
Variant operands undergo VB6 type-promotion before comparison; type-mismatch raises run-time error 13.
Emitted for <> when at least one operand is Variant or Option Compare Text is in effect; specific suffix encodes the result form.
Public Sub Main()
Dim a As Variant, b As Variant, c As Boolean
c = (a <> b)
End Sub
Encoding, evidence and notes
Encoding: FB 3C (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB3C 48FF NeVar var_B8
Form2.mnuFindFuncDependancies_Click @ 0x460130 | 460296 FB3C 30FF NeVar var_D0
frmInlineDecoderCalls.cmdHandleNumericExpansions_Click @ 0x470A88 | 470D31 FB3C 0CFF NeVar var_F4
frmInlineDecoderCalls.cmdHandleNumericExpansions_Click @ 0x470A88 | 470DC6 FB3C 0CFF NeVar var_F4
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_3C_NeVar.
Handler: 0x66106B16, unique to this slot (real opcode #269).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Boolean
c = (a <> b)Description: draft, by claude-opus-4.7. Handler 0x66106B16, dispatch slot 0x66107204, modOpcodes line 1509.
NeVarBool
(1,0x40)emittedhandler #273Variantconfirmed_msdocs17 corpus hits<> comparison (binary mode) whose result is used directly as a condition; push Boolean.Pops two Variants and compares them with <> (binary string comparison when both are strings). A Null operand makes the condition False. Pushes a Boolean (-1/0) for the following branch.
Stack: [..., a:Var, b:Var] -> [..., r:Bool]
Emitted when a Variant comparison is the condition of If, ElseIf, Do While/Until, Loop While/Until or a Select Case test, so a plain Boolean is enough. When the result is kept as a value (b = (v <> w)), the compiler uses NeVar instead, which produces a Variant (possibly Null).
Public Sub Main()
Dim a As Variant, b As Variant, n As Long
If a <> b Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FB 40 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB40 NeVarBool
fso.Proc_467FC4 @ 0x467FC4 | 468236 FB40 NeVarBool
fso.Proc_467FC4 @ 0x467FC4 | 468345 FB40 NeVarBool
fso.Proc_453AA8 @ 0x453AA8 | 453B6F FB40 NeVarBool
17 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_40_NeVarBool.
Handler: 0x66106B5D, unique to this slot (real opcode #273).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.
Sub Main()
Dim a As Variant, b As Variant, n As Long
a = 1: b = 2
If a <> b Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x66106B5D, dispatch slot 0x66107214, modOpcodes line 1507.
Control
BoS, Stop, End, Gosub, Return, Assert
Assert
(5,0x0B)not emittedhandler #737Control flowconfirmed_msdocsAssert.BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.
BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.
Encoding, evidence and notes
Encoding: FF 0B (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66108E26, unique to this slot (real opcode #737).
Finding: Debug.Assert is removed from compiled executables, so this opcode cannot be produced by compiling. It is presumably only executed by the IDE's p-code engine.
Description: draft, by claude-opus-4.7. Handler 0x66108E26, dispatch slot 0x66108140, modOpcodes line 454.
BoS
(0,0x00)emittedprimary of 4handler #1Control flowinferred_corpus3951 corpus hitsBoS.BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.
BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.
Public Sub Main()
On Error Resume Next
End Sub
Encoding, evidence and notes
Encoding: 00, then 1 operand byte(s); total instruction length 2 byte(s).
vbdec template: %2
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: 00 02 BoS loc_40144E
Form1.LoadPlugins @ 0x4644FC | 4644FC 00 02 BoS loc_4644FE
Form1.LoadPlugins @ 0x4644FC | 4644FE 00 05 BoS loc_464503
Form1.LoadPlugins @ 0x4644FC | 464503 00 37 BoS loc_46453A
3951 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_00_BoS.
Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is the primary slot. Other slots: (0,02) BoS, (2,C4) BoS, (5,1C) BoS.
Corpus: 3951 occurrence(s) in PDFStreamDumper_p.exe.
(0,0x02) BoS, (2,0xC4) BoS, (5,0x1C) BoS
Description: draft, by claude-opus-4.7. Handler 0x66104FBE, dispatch slot 0x66106D14, modOpcodes line 417.
BoS
(0,0x02)not emitteddup of (0,00)handler #1Control flowconfirmed_handler8 corpus hitsBoS.Alias dispatch slot (0, 0x02) for the canonical BoS at (0, 0x00); semantics are identical.
BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.
BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.
Encoding, evidence and notes
Encoding: 02, then 1 operand byte(s); total instruction length 2 byte(s).
vbdec template: %2
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: 02 00 BoS loc_467C67
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C67 02 00 BoS loc_467C67
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 473F4A 02 00 BoS loc_473F4A
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4742B5 02 01 BoS loc_4742B6
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is a duplicate slot of (0,00) BoS. Other slots: (0,00) BoS, (2,C4) BoS, (5,1C) BoS.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
(0,0x00) BoS, (2,0xC4) BoS, (5,0x1C) BoS
Description: draft, by claude-opus-4.7. Handler 0x66104FBE, dispatch slot 0x66106D1C, modOpcodes line 418.
BoS
(2,0xC4)not emitteddup of (0,00)handler #1Control flowconfirmed_handlerBoS.Encoding, evidence and notes
Encoding: FC C4 (lead byte FC selects table 2), then 1 operand byte(s); total instruction length 3 byte(s).
vbdec template: %2
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is a duplicate slot of (0,00) BoS. Other slots: (0,00) BoS, (0,02) BoS, (5,1C) BoS.
(0,0x00) BoS, (0,0x02) BoS, (5,0x1C) BoS
Description: none. Handler 0x66104FBE, dispatch slot 0x66107824, modOpcodes line 419.
BoS
(5,0x1C)not emitteddup of (0,00)handler #1Control flowconfirmed_handlerBoS.Encoding, evidence and notes
Encoding: FF 1C (lead byte FF selects table 5), then 1 operand byte(s); total instruction length 3 byte(s).
vbdec template: %2
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66104FBE, shared by 4 dispatch slots (real opcode #1). This is a duplicate slot of (0,00) BoS. Other slots: (0,00) BoS, (0,02) BoS, (2,C4) BoS.
(0,0x00) BoS, (0,0x02) BoS, (2,0xC4) BoS
Description: none. Handler 0x66104FBE, dispatch slot 0x66108184, modOpcodes line 420.
End
(2,0xC8)emittedhandler #458Control flowconfirmed_msdocs4 corpus hitsEnd.BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.
BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.
Public Sub Main()
Dim n As Long
If n = 2 Then End
End Sub
Encoding, evidence and notes
Encoding: FC C8 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC8 End
Form1.Shutdown @ 0x442740 | 44278E FCC8 End
Form1.Form_Unload (Cancel As Integer) @ 0x46B420 | 46B915 FCC8 End
Form1.ExtractTo @ 0x45FE38 | 4600B2 FCC8 End
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C8_End.
Handler: 0x66104FB3, unique to this slot (real opcode #458).
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66104FB3, dispatch slot 0x66107834, modOpcodes line 452.
Gosub
(3,0x0A)emittedhandler #475Control flowinferred_corpusGoSub label.Saves the address of the next instruction on the procedure's GoSub return stack, then transfers control to the branch target. A later Return (2,C9) pops the address and resumes there.
Stack: [...] -> [...] (the return address goes to the runtime's GoSub stack, not the evaluation stack)
Operand %l: proc-relative 16-bit target.
Emitted for GoSub label.
Public Sub Main()
Dim n As Long
GoSub sub1
GoTo done
sub1:
Return
done:
End Sub
Encoding, evidence and notes
Encoding: FD 0A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Observed: FD0A 0700 Gosub loc_401453
FD0A 0700 Gosub loc_401453
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_0A_Gosub.
Handler: 0x66105156, unique to this slot (real opcode #475).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim n As Long
GoSub sub1
GoTo done
sub1:
Return
done:
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105156, dispatch slot 0x6610793C, modOpcodes line 406.
OnGosub
(4,0x95)emittedhandler #654Control flowinferred_corpusOn n GoSub: pop an Integer selector and GoSub to the n-th label.Pops a 16-bit selector (the compiler converts the expression with CI2I4 first). If 1 <= n <= count, it pushes a return address and jumps to the n-th target; otherwise execution falls through to the next statement.
Stack: [..., n:I2] -> [...]
Operands: a variable-length block. The first word is the byte length of the target list (observed 0400 for two targets), followed by one 16-bit proc-relative target per label.
Emitted for On expr GoSub l1, l2, ....
Public Sub Main()
Dim n As Long
On n GoSub a1, a2
Exit Sub
a1:
Return
a2:
End Sub
Encoding, evidence and notes
Encoding: FE 95 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE95 0400 [5 bytes] OnGosub loc_401459 loc_40145B
FE95 0400 [5 bytes] OnGosub loc_401459 loc_40145B
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_95_OnGosub.
Handler: 0x66109209, unique to this slot (real opcode #654).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim n As Long
On n GoSub a1, a2
Exit Sub
a1:
Return
a2:
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109209, dispatch slot 0x66107F68, modOpcodes line 404.
OnGoto
(4,0x96)emittedhandler #655Control flowinferred_corpusOn n GoTo: pop an Integer selector and jump to the n-th label.Pops a 16-bit selector (converted with CI2I4 first). If 1 <= n <= count, it jumps to the n-th target; otherwise it falls through.
Stack: [..., n:I2] -> [...]
Operands: a variable-length block. The first word is the byte length of the target list, followed by 16-bit proc-relative targets.
Emitted for On expr GoTo l1, l2, ....
Public Sub Main()
Dim n As Long
On n GoTo a1, a2
a1:
n = 1
a2:
End Sub
Encoding, evidence and notes
Encoding: FE 96 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE96 0400 [5 bytes] OnGoto loc_401458 loc_401460
FE96 0400 [5 bytes] OnGoto loc_401458 loc_401460
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_96_OnGoto.
Handler: 0x6610923C, unique to this slot (real opcode #655).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim n As Long
On n GoTo a1, a2
a1:
n = 1
a2:
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610923C, dispatch slot 0x66107F6C, modOpcodes line 405.
Return
(2,0xC9)emittedhandler #459Control flowconfirmed_msdocsReturn.BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.
BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.
Public Sub Main()
Dim n As Long
Return
done:
End Sub
Encoding, evidence and notes
Encoding: FC C9 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC9 Return
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C9_Return.
Handler: 0x66105180, unique to this slot (real opcode #459).
Description: draft, by claude-opus-4.7. Handler 0x66105180, dispatch slot 0x66107838, modOpcodes line 453.
Stop
(2,0xC2)emittedhandler #457Control flowconfirmed_msdocs2 corpus hitsStop.BoS (Beginning-of-Statement) is a no-op marker carrying a 1- or 2-byte length used by the step debugger for line attribution. Stop raises a debug break; End terminates the application; Gosub/Return implement classic GW-BASIC subroutine semantics within a procedure.
BoS is emitted ahead of every statement boundary; others are emitted for the matching keywords.
Public Sub Main()
Dim n As Long
If n = 1 Then Stop
End Sub
Encoding, evidence and notes
Encoding: FC C2 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC2 Stop
CPdfParser.ParseFile @ 0x471F38 | 472326 FCC2 Stop
frmBruteZLib.Command4_Click @ 0x46C9E8 | 46CCAE FCC2 Stop
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C2_Stop.
Handler: 0x66108E32, unique to this slot (real opcode #457).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66108E32, dispatch slot 0x6610781C, modOpcodes line 451.
Duplicate
Duplicate variant/string on stack
FDupStr
(4,0x93)not emittedhandler #653Stringinferred_corpusEncoding, evidence and notes
Encoding: FE 93 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B27C, unique to this slot (real opcode #653).
Description: none. Handler 0x6610B27C, dispatch slot 0x66107F60, modOpcodes line 387.
FDupVar
(4,0x92)emittedhandler #652Variantinferred_corpus15 corpus hitsCopies the top value (per its type's copy semantics: BSTR SysAllocString, Variant VariantCopy, etc.). Used when an expression needs the same value in two places without re-evaluation.
Stack: [..., a:Var] -> [..., a, a':Var]
Inserted by the compiler in expressions that consume a value twice (e.g. x = f(): use1 x: use2 x patterns).
Public Sub Main()
End Sub
Sub TakeVarV(ByVal v As Variant)
End Sub
Encoding, evidence and notes
Encoding: FE 92 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %r %a
Operands:
%r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FE92 0C006CFF FDupVar 0xC (Variant) var_94
Form1.safe @ 0x44D7B8 | 44D7B8 FE92 0C0068FF FDupVar 0xC (Variant) var_98
fso.Proc_45ECB4 @ 0x45ECB4 | 45ECB6 FE92 0C0068FF FDupVar 0xC (Variant) var_98
fso.Proc_45D698 @ 0x45D698 | 45D69A FE92 100068FF FDupVar 0x10 (I1) var_98
15 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_92_FDupVar.
Handler: 0x66106469, unique to this slot (real opcode #652).
Corpus: 15 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106469, dispatch slot 0x66107F5C, modOpcodes line 386.
Error
OnError / Resume / Error
Error
(0,0x45)emittedprimary of 2handler #68Error handlingconfirmed_msdocsError n statement: raise run-time error n.Pops the error number and raises that run-time error through the procedure's current error handler.
Stack: [..., n:I4] -> [...] (does not return normally unless the error is handled with Resume Next)
Emitted for the legacy Error n statement. Err.Raise n compiles to a late call on the Err object instead.
Public Sub Main()
Error 5
End Sub
Encoding, evidence and notes
Encoding: 45, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 45 Error
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_45_Error.
Handler: 0x6610B127, shared by 2 dispatch slots (real opcode #68). This is the primary slot. Other slots: (2,C1) Error.
Check of vb6_source_eq example: verified: compiles and emits this slot.
On Error Resume Next
Error 5Description: draft, by claude-opus-5-5. Handler 0x6610B127, dispatch slot 0x66106E28, modOpcodes line 413.
Error
(2,0xC1)not emitteddup of (0,45)handler #68Error handlingconfirmed_handlerError n statement: raise run-time error n.Dispatch slot (2, 0xC1) runs the same MSVBVM60 handler as (0,45) Error; runtime behaviour is identical.
Pops the error number and raises that run-time error through the procedure's current error handler.
Stack: [..., n:I4] -> [...] (does not return normally unless the error is handled with Resume Next)
Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,45) Error instead.
Encoding, evidence and notes
Encoding: FC C1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B127, shared by 2 dispatch slots (real opcode #68). This is a duplicate slot of (0,45) Error. Other slots: (0,45) Error.
Description: draft, by claude-opus-5-5. Handler 0x6610B127, dispatch slot 0x66107818, modOpcodes line 414.
OnErrorGoto
(0,0x4B)emittedprimary of 2handler #74Error handlinginferred_corpus276 corpus hitsOn Error statement: set the procedure's error-handling mode.Records the error-handling mode in the procedure's frame. No stack effect.
Operand (16-bit): FFFF Resume Next, FFFE disable (GoTo 0), 0000 clear the current error state (GoTo -1), otherwise the handler offset.
Emitted for every On Error statement. The operand encodes the form: FFFF = On Error Resume Next (vbdec shows OnErrorResumeNext), FFFE = On Error GoTo 0, 0000 = On Error GoTo -1 (vbdec mislabels this as a jump to the procedure start), and any other value = On Error GoTo label (proc-relative handler offset).
Public Sub Main()
On Error Resume Next
End Sub
Encoding, evidence and notes
Encoding: 4B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Observed: 4B FFFF OnErrorResumeNext
Form1.LoadPlugins @ 0x4644FC | 464500 4B FFFF OnErrorResumeNext
Form1.cmdAbortProcessing_Click @ 0x441954 | 441958 4B FFFF OnErrorResumeNext
Form1.mn_b64EncClip_Click @ 0x447B64 | 447B68 4B FFFF OnErrorResumeNext
276 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4B_OnErrorGoto.
Handler: 0x66106206, shared by 2 dispatch slots (real opcode #74). This is the primary slot. Other slots: (3,0B) OnErrorGoto.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 276 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
On Error GoTo eh
n = 1
Exit Sub
eh:
n = 0Description: draft, by claude-opus-5-5. Handler 0x66106206, dispatch slot 0x66106E40, modOpcodes line 408.
OnErrorGoto
(3,0x0B)not emitteddup of (0,4B)handler #74Error handlingconfirmed_handlerOn Error statement: set the procedure's error-handling mode.Encoding, evidence and notes
Encoding: FD 0B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106206, shared by 2 dispatch slots (real opcode #74). This is a duplicate slot of (0,4B) OnErrorGoto. Other slots: (0,4B) OnErrorGoto.
Description: none. Handler 0x66106206, dispatch slot 0x66107940, modOpcodes line 409.
Resume
(3,0x0C)emittedhandler #476Error handlinginferred_corpus1 corpus hitsResume statement: leave an error handler and continue execution.Clears the current error, re-arms the handler and transfers control to the resume target. No stack effect.
Emitted for Resume label, Resume Next and Resume (retry) inside an error handler. The operand selects the form: a proc-relative label offset, or special values for Next and retry (vbdec shows ResumeNext for FFFF).
Public Sub Main()
Dim n As Long
n = 1 / n
rl:
Resume rl
End Sub
Encoding, evidence and notes
Encoding: FD 0C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %l
Operands:
%l: branch_target_local, 2 byte(s). 16-bit branch target, offset from the start of the procedure's p-code (vbdecloc_= proc start + offset).
Observed: FD0C 0C00 Resume loc_401458
Form1.LoadPlugins @ 0x4644FC | 4647FF FD0C FFFF ResumeNext
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_0C_Resume.
Handler: 0x6610B0BA, unique to this slot (real opcode #476).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
On Error GoTo eh
n = 1 / n
done:
Exit Sub
eh:
Resume doneDescription: draft, by claude-opus-5-5. Handler 0x6610B0BA, dispatch slot 0x66107944, modOpcodes line 407.
SetLastSystemError
(0,0x3C)emittedprimary of 2handler #59Error handlingconfirmed_msdocs87 corpus hitsGetLastError after a Declare'd API call (for Err.LastDllError).Calls GetLastError and stores the value in the per-thread error object, where Err.LastDllError reads it. No stack effect.
Emitted immediately after every call to a Declared DLL procedure. It is what makes Err.LastDllError meaningful. It is not emitted after calls to VB procedures or typelib-declared functions.
Private Declare Sub Ext Lib "x.dll" Alias "#5" ()
Public Sub Main()
Ext
End Sub
Encoding, evidence and notes
Encoding: 3C, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 3C SetLastSystemError
Form1.LoadPlugins @ 0x4644FC | 464754 3C SetLastSystemError
Form1.SleepFor @ 0x43E7AC | 43E7C4 3C SetLastSystemError
Form1.Command1_Click @ 0x444218 | 444273 3C SetLastSystemError
87 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3C_SetLastSystemError.
Handler: 0x66106936, shared by 2 dispatch slots (real opcode #59). This is the primary slot. Other slots: (2,62) SetLastSystemError.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 87 occurrence(s) in PDFStreamDumper_p.exe.
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub Main()
Dim n As Long
n = GetTickCount()
End SubDescription: draft, by claude-opus-5-5. Handler 0x66106936, dispatch slot 0x66106E04, modOpcodes line 411.
SetLastSystemError
(2,0x62)not emitteddup of (0,3C)handler #59Error handlingconfirmed_handlerGetLastError after a Declare'd API call (for Err.LastDllError).Dispatch slot (2, 0x62) runs the same MSVBVM60 handler as (0,3C) SetLastSystemError; runtime behaviour is identical.
Calls GetLastError and stores the value in the per-thread error object, where Err.LastDllError reads it. No stack effect.
Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,3C) SetLastSystemError instead.
Encoding, evidence and notes
Encoding: FC 62 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106936, shared by 2 dispatch slots (real opcode #59). This is a duplicate slot of (0,3C) SetLastSystemError. Other slots: (0,3C) SetLastSystemError.
Description: draft, by claude-opus-5-5. Handler 0x66106936, dispatch slot 0x6610769C, modOpcodes line 412.
Event
RaiseEvent
RaiseEvent
(5,0x0C)emittedhandler #738Object / COMinferred_corpus18 corpus hitsRaiseEvent: fire one of the class's events, by DISPID, on every connected WithEvents sink.Fires an event declared with Event in the current class, form or UserControl. Operands: u32 dispid, then u16 cArgs. The argument values are already on the stack. The runtime walks the object's list of connected sinks (one per WithEvents variable or connection point) and calls IDispatch::Invoke(dispid, IID_NULL, 1033, DISPATCH_METHOD) on each one, so the event is selected by DISPID and the event's name is never used.
The DISPID is the event's MemberId, numbered 1..n in declaration order (the order of the Event statements, whatever members are declared between them). It matches the MemberId field (+0x0C) of the event descriptor at index dispid - 1 in the private object's event array (PrivateObject+0x24, count = u16 at +0x12). That descriptor gives the argument types and names (argSize is always 4 x the argument count, even for ByVal Double or Currency, so it agrees with cArgs), but it has no pointer to the event's name.
Event names are written by the compiler but nothing references them: they follow the class's GUIDs (CLSID, interface IIDs, and the event source IID at OptionalObjectInfo +0x14, count at +0x18) and its method-name strings, 4-byte aligned and in declaration order. A name that already exists elsewhere in the project (the whole string, or the tail of a longer string) is not written again, and other strings the compiler needs at that point (such as the library name VB) can land inside the run. A safe recovery rule: skip strings that something references (other than a method-name array), and accept the run only when it holds exactly one string per event; otherwise show the event by DISPID. vbdec prints recovered names and falls back to event_<dispid>. Over 80 randomized projects (1,116 events) the rule named 675 events and never produced a wrong name.
Emitted for each RaiseEvent statement in a class, form, UserControl or other object module that declares Event. One instruction per statement; the DISPID is the event's position in declaration order (from 1).
_lblEX_RaiseEvent (0x6610A84B): mov eax,[esi] (DISPID), movzx ebx, word [esi+4] (cArgs), add esi,6, then RaiseEventOnBasicClass(this, dispid, esp, cArgs) (0x660E6058) and lblLateExitRetval. RaiseEventOnBasicClass builds a DISPPARAMS from the stack arguments and, for each live sink in the list at this+0x34, calls Invoke (vtable +0x18) with flags 1 (DISPATCH_METHOD); an exception raised by a sink is reported through HresultCheck when error trapping asks for it. The compiled-code helper __vbaRaiseEvent (0x6610E9F8) calls the same routine.
Public Sub Main()
Dim k As New CSink
End Sub
' ---- CSrc.cls
Public Event Fired(ByVal n As Long, s As String)
Public Event Simple()
Public Sub Go()
Dim s As String
RaiseEvent Fired(1, s)
RaiseEvent Simple
End Sub
' ---- CSink.cls
Private WithEvents src As CSrc
Public Sub Hook()
Set src = New CSrc
src.Go
End Sub
Private Sub src_Fired(ByVal n As Long, s As String)
s = CStr(n)
End Sub
Private Sub src_Simple()
End Sub
Encoding, evidence and notes
Encoding: FF 0C (lead byte FF selects table 5), then 6 operand bytes; total instruction length 8 bytes.
vbdec template: dispid:%4 args:%2 (was eventIndex:%2 unk:%2 args%2, which split the DISPID into two words)
Operands:
%4(dispid): u32, the event's MemberId (1..n in declaration order).%2(args): u16, number of arguments already pushed.
Observed (decoded): 010000000200 RaiseEvent Fired(ByVal n As Long, s As String) dispid:0x1 args:0x2
401B1F FF0C 010000000200 RaiseEvent Fired(ByVal n As Long, s As String) dispid:0x1 args:0x2
401B2A FF0C 020000000000 RaiseEvent Simple() dispid:0x2 args:0x0
Phase 4 probe, decoded by vbdec's RaiseEvent post-processor (2026-10-14). More cases from event_lab.py:
RaiseEvent doit(x) -> RaiseEvent doit(x As Variant) dispid:0x1 args:0x1
RaiseEvent Beta(2, "x") -> RaiseEvent Beta(ByVal a As Long, b As String) dispid:0x2 args:0x2
RaiseEvent Delta (4th Event) -> RaiseEvent Delta() dispid:0x4 args:0x0
RaiseEvent Zulu(1) (events declared between private fields) -> RaiseEvent Zulu(a As Long) dispid:0x1 args:0x1
RaiseEvent FireAll (both names also used in another class) -> RaiseEvent event_2() dispid:0x2 args:0x0Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0C_RaiseEvent.
Handler: 0x6610A84B, unique to this slot (real opcode #738).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 18 occurrence(s) in PDFStreamDumper_p.exe.
Runtime check: confirmed 2026-10-14 against the handler and event_lab.py (five classes: events declared before, between and after other members; a class with no public methods; event names shared with another class). Every DISPID matched the event's declaration position, and every argument list matched the source. Name recovery was checked on the lab, opcodes_p.exe and PDFStreamDumper (where Complete is merged into a longer string and the run is correctly rejected), then stress-tested with event_lab2.py: 80 randomized projects with classes and forms (412 objects, 1,116 events), 0 wrong names and 0 DISPID mismatches in vbdec's output.
Dim o As CSrc
Set o = New CSrc
o.Go
' ---- CSrc.cls
Public Event Fired(ByVal n As Long)
Public Sub Go()
RaiseEvent Fired(1)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A84B, dispatch slot 0x66108144, modOpcodes line 426.
ExitProc
Function/sub return
ExitProcCb
(3,0x95)emittedhandler #549Procedure call/returninferred_corpus20 corpus hitsRestores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot, copied (operand: byte count) into the caller-supplied result buffer.
Epilogue of module Functions declared As Variant (or with no type). The operand is the byte count of the result copied to the caller's hidden result buffer (observed 0x10, one Variant).
Public Sub Main()
End Sub
Function F() As Variant
F = 5
End Function
Encoding, evidence and notes
Encoding: FD 95 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: FD95 1000 ExitProcCb
fso.Proc_4468A8 @ 0x4468A8 | 44693A FD95 1000 ExitProcCb
fso.Proc_441A70 @ 0x441A70 | 441AB6 FD95 1000 ExitProcCb
fso.Proc_4454EC @ 0x4454EC | 44556B FD95 1000 ExitProcCb
20 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_95_ExitProcCb.
Handler: 0x6610BF2F, unique to this slot (real opcode #549).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 20 occurrence(s) in PDFStreamDumper_p.exe.
Function F() As Variant
F = 5
End Function
Sub Main()
Dim v As Variant
v = F()
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610BF2F, dispatch slot 0x66107B68, modOpcodes line 488.
ExitProcCbHresult
(5,0x2F)emittedhandler #756Procedure call/returninferred_corpus210 corpus hitsCopies sz bytes from the local return slot copy:%a to the [out, retval] argument to:%a, restores the caller's frame and returns the HRESULT.
Epilogue of class/form Functions and Property Gets. The value is copied to the caller's [out, retval] pointer and the HRESULT returned. Operands: source slot, destination argument, byte count.
Public Sub Main()
Dim o As New CR, s As String
End Sub
' ---- CR.cls
Public Function F(ByVal n As Long) As String
If n Then F = "x": Exit Function
F = "y"
End Function
Encoding, evidence and notes
Encoding: FF 2F (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: copyTo:%a sz:%2 %}
Operands:
%a(copyTo): local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(sz): immediate_word, 2 byte(s). 16-bit immediate.%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: FF2F 10000400 ExitProcCbHresult copyTo:arg_10 sz:0x4
Form1.RegisterPlugin @ 0x44CB20 | 44CC08 FF2F 18001000 ExitProcCbHresult copyTo:arg_18 sz:0x10
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D570 FF2F 10000200 ExitProcCbHresult copyTo:arg_10 sz:0x2
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D5F4 FF2F 10000200 ExitProcCbHresult copyTo:arg_10 sz:0x2
210 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2F_ExitProcCbHresult.
Handler: 0x661067B0, unique to this slot (real opcode #756).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 210 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As CR, s As String
Set o = New CR
s = o.F()
' ---- CR.cls
Public Function F() As String
F = "x"
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x661067B0, dispatch slot 0x661081D0, modOpcodes line 492.
ExitProcCbStack
(3,0x96)not emittedhandler #550Procedure call/returninferred_corpusEncoding, evidence and notes
Encoding: FD 96 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BEB0, unique to this slot (real opcode #550).
Description: none. Handler 0x6610BEB0, dispatch slot 0x66107B6C, modOpcodes line 489.
ExitProcCy
(0,0x18)emittedprimary of 2handler #23Procedure call/returninferred_corpusLoads the 8-byte Currency return value from the procedure's return slot into EDX:EAX, tears down the frame and returns to the caller.
Stack: [...] -> (frame discarded)
Emitted as the epilogue of a module Function declared As Currency.
Public Sub Main()
End Sub
Function F() As Currency
F = 1.5@
End Function
Encoding, evidence and notes
Encoding: 18, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: 18 ExitProcCy
18 ExitProcCy
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_18_ExitProcCy.
Handler: 0x6610BEC9, shared by 2 dispatch slots (real opcode #23). This is the primary slot. Other slots: (2,D1) ExitProcCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
End Sub
Function F() As Currency
F = 1.5@
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610BEC9, dispatch slot 0x66106D74, modOpcodes line 476.
ExitProcCy
(2,0xD1)not emitteddup of (0,18)handler #23Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FC D1 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BEC9, shared by 2 dispatch slots (real opcode #23). This is a duplicate slot of (0,18) ExitProcCy. Other slots: (0,18) ExitProcCy.
Description: none. Handler 0x6610BEC9, dispatch slot 0x66107858, modOpcodes line 482.
ExitProcFrameCb
(4,0x9E)emittedhandler #662UDT / recordinferred_corpusCopies sz bytes of the UDT return value from the local slot %a to the hidden result buffer supplied by the caller, then returns. Observed: FE9E 66FF 1600 = local var_9A, 0x16 bytes, for a 22-byte UDT.
Operands: %a source frame slot (2 bytes), %2 byte count (2 bytes).
Emitted as the epilogue of a module Function that returns a UDT larger than 8 bytes (probe: Function F() As TB, 22-byte type). See ExitProcFrameCbStack for small UDTs and ExitProcFrameCbHresult for class methods.
Private Type TB
x(15) As Byte
s As String * 3
End Type
Public Sub Main()
Dim a As TB
End Sub
Private Function F() As TB
End Function
Encoding, evidence and notes
Encoding: FE 9E (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: FE9E 66FF1600 ExitProcFrameCb
FE9E 66FF1600 ExitProcFrameCb
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9E_ExitProcFrameCb.
Handler: 0x6610BEE8, unique to this slot (real opcode #662).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TB
x(15) As Byte
s As String * 3
End Type
Public Sub Main()
Dim a As TB
End Sub
Private Function F() As TB
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610BEE8, dispatch slot 0x66107F8C, modOpcodes line 490.
ExitProcFrameCbHresult
(5,0x30)emittedhandler #757UDT / recordinferred_corpusCopies sz bytes from local copy:%a to the caller-supplied out-parameter to:%a, then returns S_OK. Observed: copy:var_88 to:arg_C sz:0x4.
Operands: source slot %a, destination argument %a, byte count %2.
Emitted as the epilogue of a class-module Function returning a UDT, and of public methods returning a public UDT in an ActiveX DLL.
Public Sub Main()
Dim o As New CR2
End Sub
' ---- CR2.cls
Private Type TR
a As Long
End Type
Private Function F() As TR
End Function
Public Sub Work()
Dim r As TR
r = F()
End Sub
Encoding, evidence and notes
Encoding: FF 30 (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: copy:%a to:%a sz:%2
Operands:
%a(copy): local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%a(to): local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(sz): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF30 78FF0C000400 ExitProcFrameCbHresult copy:var_88 to:arg_C sz:0x4
FF30 78FF0C000400 ExitProcFrameCbHresult copy:var_88 to:arg_C sz:0x4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_30_ExitProcFrameCbHresult.
Handler: 0x6610BF09, unique to this slot (real opcode #757).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As New CR2
End Sub
' ---- CR2.cls
Private Type TR
a As Long
End Type
Private Function F() As TR
End Function
Public Sub Work()
Dim r As TR
r = F()
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610BF09, dispatch slot 0x661081D4, modOpcodes line 493.
ExitProcFrameCbStack
(4,0x9F)emittedhandler #663UDT / recordinferred_corpusReturns a UDT whose size fits the small-struct convention. Operands as ExitProcFrameCb: %a source slot, %2 byte count (observed 8 for Type TPlain: a As Long: b As Integer). The handler differs from ExitProcFrameCb in how the result reaches the caller (stack/registers vs. buffer); exact mechanics not yet verified at the handler level.
Emitted as the epilogue of a module Function returning an 8-byte UDT.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TPlain
End Sub
Private Function F() As TPlain
F.a = 1
End Function
Encoding, evidence and notes
Encoding: FE 9F (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: FE9F 74FF0800 ExitProcFrameCbStack
FE9F 74FF0800 ExitProcFrameCbStack
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9F_ExitProcFrameCbStack.
Handler: 0x6610BE63, unique to this slot (real opcode #663).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TPlain
End Sub
Private Function F() As TPlain
F.a = 1
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610BE63, dispatch slot 0x66107F90, modOpcodes line 491.
ExitProcHresult
(0,0x13)emittedprimary of 2handler #18Procedure call/returninferred_corpus581 corpus hitsRestores the caller's frame and returns the HRESULT (S_OK unless an unhandled error occurred) in EAX.
Epilogue of COM-visible procedures in class, form and control modules that return nothing: Sub, Property Let, Property Set, and event handlers. These are HRESULT methods, so the epilogue returns S_OK (or the error HRESULT).
Public Sub Main()
Dim o As New CEx
End Sub
' ---- CEx.cls
Public Property Let v(x As Long)
If x Then Exit Property
End Property
Encoding, evidence and notes
Encoding: 13, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: 13 ExitProcHresult
Form1.LoadPlugins @ 0x4644FC | 464590 13 ExitProcHresult
Form1.LoadPlugins @ 0x4644FC | 4645F7 13 ExitProcHresult
Form1.LoadPlugins @ 0x4644FC | 4647A9 13 ExitProcHresult
581 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_13_ExitProcHresult.
Handler: 0x6610681F, shared by 2 dispatch slots (real opcode #18). This is the primary slot. Other slots: (2,6D) ExitProcHresult.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 581 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As CEx
Set o = New CEx
o.Work
' ---- CEx.cls
Public Sub Work()
Dim n As Long
n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610681F, dispatch slot 0x66106D60, modOpcodes line 486.
ExitProcHresult
(2,0x6D)not emitteddup of (0,13)handler #18Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FC 6D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610681F, shared by 2 dispatch slots (real opcode #18). This is a duplicate slot of (0,13) ExitProcHresult. Other slots: (0,13) ExitProcHresult.
Description: none. Handler 0x6610681F, dispatch slot 0x661076C8, modOpcodes line 487.
ExitProcI2
(0,0x15)emittedprimary of 2handler #20Procedure call/returninferred_corpus37 corpus hitsRestores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in AX.
Epilogue of module Functions declared As Integer or As Boolean (result in AX).
Public Sub Main()
End Sub
Function F() As Boolean
F = True
End Function
Encoding, evidence and notes
Encoding: 15, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: 15 ExitProcI2
modZLIB.Proc_45E44C @ 0x45E44C | 45E6C1 15 ExitProcI2
modZLIB.Proc_4666C0 @ 0x4666C0 | 466A51 15 ExitProcI2
fso.Proc_43D564 @ 0x43D564 | 43D56C 15 ExitProcI2
37 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_15_ExitProcI2.
Handler: 0x66106828, shared by 2 dispatch slots (real opcode #20). This is the primary slot. Other slots: (2,CD) ExitProcI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 37 occurrence(s) in PDFStreamDumper_p.exe.
Function F() As Boolean
F = True
End Function
Sub Main()
Dim b As Boolean
b = F()
End SubDescription: draft, by claude-opus-5-5. Handler 0x66106828, dispatch slot 0x66106D68, modOpcodes line 473.
ExitProcI2
(2,0xCD)not emitteddup of (0,15)handler #20Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FC CD (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106828, shared by 2 dispatch slots (real opcode #20). This is a duplicate slot of (0,15) ExitProcI2. Other slots: (0,15) ExitProcI2.
Description: none. Handler 0x66106828, dispatch slot 0x66107848, modOpcodes line 478.
ExitProcI4
(0,0x14)emittedprimary of 5handler #19Procedure call/returninferred_corpus95 corpus hitsRestores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.
The compiler uses this epilogue for every Standard-module Sub and for module Functions whose result fits in EAX as a 32-bit value: As Long and As String (the BSTR pointer). The ExitProcStr slots share this handler and are never emitted.
Public Sub Main()
Dim n As Long
End Sub
Encoding, evidence and notes
Encoding: 14, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: 14 ExitProcI4
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6CC 14 ExitProcI4
modZLIB.Proc_43D378 @ 0x43D378 | 43D380 14 ExitProcI4
modZLIB.Proc_43E804 @ 0x43E804 | 43E824 14 ExitProcI4
95 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_14_ExitProcI4.
Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is the primary slot. Other slots: (2,CE) ExitProcStr, (2,D3) ExitProcStr, (2,D4) ExitProcStr, (2,D5) ExitProcStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 95 occurrence(s) in PDFStreamDumper_p.exe.
Function F() As Long
F = 70000
End Function
Sub Main()
Dim n As Long
n = F()
End Sub(2,0xCE) ExitProcStr, (2,0xD3) ExitProcStr, (2,0xD4) ExitProcStr, (2,0xD5) ExitProcStr
Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66106D64, modOpcodes line 472.
ExitProcR4
(0,0x16)emittedprimary of 2handler #21Procedure call/returninferred_corpus1 corpus hitsRestores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and loaded onto the FPU (ST0).
Epilogue of module Functions declared As Single (result in ST0).
Public Sub Main()
End Sub
Function F() As Single
F = 1.5!
End Function
Encoding, evidence and notes
Encoding: 16, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: 16 ExitProcR4
modActionScript.Proc_43EB1C @ 0x43EB1C | 43EB3D 16 ExitProcR4
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_16_ExitProcR4.
Handler: 0x6610BF42, shared by 2 dispatch slots (real opcode #21). This is the primary slot. Other slots: (2,CF) ExitProcR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Function F() As Single
F = 1.5!
End Function
Sub Main()
Dim s As Single
s = F()
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610BF42, dispatch slot 0x66106D6C, modOpcodes line 474.
ExitProcR4
(2,0xCF)not emitteddup of (0,16)handler #21Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FC CF (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BF42, shared by 2 dispatch slots (real opcode #21). This is a duplicate slot of (0,16) ExitProcR4. Other slots: (0,16) ExitProcR4.
Description: none. Handler 0x6610BF42, dispatch slot 0x66107850, modOpcodes line 480.
ExitProcR8
(0,0x17)emittedprimary of 2handler #22Procedure call/returninferred_corpusLoads the 8-byte floating-point return value onto the FPU stack (ST0), tears down the frame and returns.
Stack: [...] -> (frame discarded)
Emitted as the epilogue of a module Function declared As Double or As Date (probe: Function F() As Date).
Public Sub Main()
End Sub
Function F() As Date
F = #1/1/2000#
End Function
Encoding, evidence and notes
Encoding: 17, then 0 operand byte(s); total instruction length 1 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: 17 ExitProcR8
17 ExitProcR8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_17_ExitProcR8.
Handler: 0x6610BF4F, shared by 2 dispatch slots (real opcode #22). This is the primary slot. Other slots: (2,D0) ExitProcR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
End Sub
Function F() As Date
F = #1/1/2000#
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610BF4F, dispatch slot 0x66106D70, modOpcodes line 475.
ExitProcR8
(2,0xD0)not emitteddup of (0,17)handler #22Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FC D0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BF4F, shared by 2 dispatch slots (real opcode #22). This is a duplicate slot of (0,17) ExitProcR8. Other slots: (0,17) ExitProcR8.
Description: none. Handler 0x6610BF4F, dispatch slot 0x66107854, modOpcodes line 481.
ExitProcStr
(2,0xCE)not emitteddup of (0,14)handler #19Procedure call/returninferred_corpusEncoding, evidence and notes
Encoding: FC CE (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,D3) ExitProcStr, (2,D4) ExitProcStr, (2,D5) ExitProcStr.
(0,0x14) ExitProcI4, (2,0xD3) ExitProcStr, (2,0xD4) ExitProcStr, (2,0xD5) ExitProcStr
Description: none. Handler 0x661067E8, dispatch slot 0x6610784C, modOpcodes line 479.
ExitProcStr
(2,0xD3)not emitteddup of (0,14)handler #19Procedure call/returnconfirmed_handlerDispatch slot (2, 0xD3) runs the same MSVBVM60 handler as (0,14) ExitProcI4; runtime behaviour is identical.
Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.
Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,14) ExitProcI4 instead.
Encoding, evidence and notes
Encoding: FC D3 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,CE) ExitProcStr, (2,D4) ExitProcStr, (2,D5) ExitProcStr.
(0,0x14) ExitProcI4, (2,0xCE) ExitProcStr, (2,0xD4) ExitProcStr, (2,0xD5) ExitProcStr
Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66107860, modOpcodes line 483.
ExitProcStr
(2,0xD4)not emitteddup of (0,14)handler #19Procedure call/returnconfirmed_handlerDispatch slot (2, 0xD4) runs the same MSVBVM60 handler as (0,14) ExitProcI4; runtime behaviour is identical.
Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.
Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,14) ExitProcI4 instead.
Encoding, evidence and notes
Encoding: FC D4 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,CE) ExitProcStr, (2,D3) ExitProcStr, (2,D5) ExitProcStr.
(0,0x14) ExitProcI4, (2,0xCE) ExitProcStr, (2,0xD3) ExitProcStr, (2,0xD5) ExitProcStr
Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66107864, modOpcodes line 484.
ExitProcStr
(2,0xD5)not emitteddup of (0,14)handler #19Procedure call/returnconfirmed_handlerDispatch slot (2, 0xD5) runs the same MSVBVM60 handler as (0,14) ExitProcI4; runtime behaviour is identical.
Restores the caller's frame and returns. The return value is not on the evaluation stack: it is read from the procedure's return slot and placed in EAX.
Not emitted by VB6 SP6 in Phase 4 probes. The same source compiles to (0,14) ExitProcI4 instead.
Encoding, evidence and notes
Encoding: FC D5 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661067E8, shared by 5 dispatch slots (real opcode #19). This is a duplicate slot of (0,14) ExitProcI4. Other slots: (0,14) ExitProcI4, (2,CE) ExitProcStr, (2,D3) ExitProcStr, (2,D4) ExitProcStr.
(0,0x14) ExitProcI4, (2,0xCE) ExitProcStr, (2,0xD3) ExitProcStr, (2,0xD4) ExitProcStr
Description: draft, by claude-opus-5-5. Handler 0x661067E8, dispatch slot 0x66107868, modOpcodes line 485.
ExitProcUI1
(2,0xCC)emittedhandler #461Procedure call/returninferred_corpusLoads the Byte return value into AL, tears down the frame and returns.
Stack: [...] -> (frame discarded)
Emitted as the epilogue of a module Function declared As Byte.
Public Sub Main()
End Sub
Function F() As Byte
F = 7
End Function
Encoding, evidence and notes
Encoding: FC CC (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
vbdec template: %}
Operands:
%}: eop_marker, 0 byte(s). display-only end-of-procedure marker; consumes no bytes.
Observed: FCCC ExitProcUI1
FCCC ExitProcUI1
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_CC_ExitProcUI1.
Handler: 0x6610BF5C, unique to this slot (real opcode #461).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
End Sub
Function F() As Byte
F = 7
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610BF5C, dispatch slot 0x66107844, modOpcodes line 477.
FFree
Free heap memory of frame slot(s) Prefix: F = frame slot being freed
FFree1Ad
(0,0x1A)emittedprimary of 2handler #25Stack & frameinferred_corpus915 corpus hitsFFree1Ad.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Public Sub Main()
F
End Sub
Function F() As Object
Set F = New Collection
End Function
Encoding, evidence and notes
Encoding: 1A, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 1A 78FF FFree1Ad var_88
Form1.LoadPlugins @ 0x4644FC | 464531 1A 68FF FFree1Ad var_98
Form1.LoadPlugins @ 0x4644FC | 4645D3 1A 68FF FFree1Ad var_98
Form1.LoadPlugins @ 0x4644FC | 4646B2 1A 68FF FFree1Ad var_98
915 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1A_FFree1Ad.
Handler: 0x661065CE, shared by 2 dispatch slots (real opcode #25). This is the primary slot. Other slots: (3,9B) FFree1Ad.
Corpus: 915 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661065CE, dispatch slot 0x66106D7C, modOpcodes line 729.
FFree1Ad
(3,0x9B)not emitteddup of (0,1A)handler #25Stack & frameconfirmed_handlerFFree1Ad.Encoding, evidence and notes
Encoding: FD 9B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661065CE, shared by 2 dispatch slots (real opcode #25). This is a duplicate slot of (0,1A) FFree1Ad. Other slots: (0,1A) FFree1Ad.
Description: none. Handler 0x661065CE, dispatch slot 0x66107B80, modOpcodes line 730.
FFree1Str
(0,0x2F)emittedprimary of 2handler #46Stack & frameinferred_corpus541 corpus hitsFFree1Str.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Public Sub Main()
F
End Sub
Function F() As String
F = "abc"
End Function
Encoding, evidence and notes
Encoding: 2F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 2F 78FF FFree1Str var_88
Form1.LoadPlugins @ 0x4644FC | 46452E 2F 64FF FFree1Str var_9C
Form1.LoadPlugins @ 0x4644FC | 4645D0 2F 64FF FFree1Str var_9C
Form1.LoadPlugins @ 0x4644FC | 46466B 2F 64FF FFree1Str var_9C
541 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2F_FFree1Str.
Handler: 0x6610656F, shared by 2 dispatch slots (real opcode #46). This is the primary slot. Other slots: (3,9A) FFree1Str.
Corpus: 541 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610656F, dispatch slot 0x66106DD0, modOpcodes line 716.
FFree1Str
(3,0x9A)not emitteddup of (0,2F)handler #46Stack & frameconfirmed_handlerFFree1Str.Encoding, evidence and notes
Encoding: FD 9A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610656F, shared by 2 dispatch slots (real opcode #46). This is a duplicate slot of (0,2F) FFree1Str. Other slots: (0,2F) FFree1Str.
Description: none. Handler 0x6610656F, dispatch slot 0x66107B7C, modOpcodes line 717.
FFree1Var
(0,0x35)emittedprimary of 2handler #52Stack & frameinferred_corpus1024 corpus hitsFFree1Var.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Public Sub Main()
TakeVar True
End Sub
Sub TakeVar(v As Variant)
End Sub
Encoding, evidence and notes
Encoding: 35, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 35 5CFF FFree1Var var_A4
Form1.LoadPlugins @ 0x4644FC | 464534 35 54FF FFree1Var var_AC
Form1.LoadPlugins @ 0x4644FC | 464691 35 54FF FFree1Var var_AC
Form1.LoadPlugins @ 0x4644FC | 464745 35 54FF FFree1Var var_AC
1024 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_35_FFree1Var.
Handler: 0x661065A2, shared by 2 dispatch slots (real opcode #52). This is the primary slot. Other slots: (3,99) FFree1Var.
Corpus: 1024 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661065A2, dispatch slot 0x66106DE8, modOpcodes line 719.
FFree1Var
(3,0x99)not emitteddup of (0,35)handler #52Stack & frameconfirmed_handlerFFree1Var.Encoding, evidence and notes
Encoding: FD 99 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661065A2, shared by 2 dispatch slots (real opcode #52). This is a duplicate slot of (0,35) FFree1Var. Other slots: (0,35) FFree1Var.
Description: none. Handler 0x661065A2, dispatch slot 0x66107B78, modOpcodes line 720.
FFreeAd
(0,0x29)emittedprimary of 2handler #40Stack & frameinferred_corpus408 corpus hitsFFreeAd.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Private Type TR
o As Object
u As IUnknown
v As Variant
End Type
Dim gr As TR
Public Sub Main()
Dim o As Object
Set gr.u = F()
End Sub
Function F() As Object
End Function
Encoding, evidence and notes
Encoding: 29, then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 29 0400 [4 bytes] FFreeAd var_8C var_90
Form1.LoadPlugins @ 0x4644FC | 464576 29 0600 [6 bytes] FFreeAd var_98 var_150 var_154
Form1.RegisterPlugin @ 0x44CB20 | 44CB63 29 0400 [4 bytes] FFreeAd var_9C var_A8
Form1.RegisterPlugin @ 0x44CB20 | 44CB8A 29 0400 [4 bytes] FFreeAd var_9C var_A4
408 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_29_FFreeAd.
Handler: 0x661065FC, shared by 2 dispatch slots (real opcode #40). This is the primary slot. Other slots: (4,B4) FFreeAd.
Corpus: 408 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661065FC, dispatch slot 0x66106DB8, modOpcodes line 727.
FFreeAd
(4,0xB4)not emitteddup of (0,29)handler #40Stack & frameconfirmed_handlerFFreeAd.Encoding, evidence and notes
Encoding: FE B4 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661065FC, shared by 2 dispatch slots (real opcode #40). This is a duplicate slot of (0,29) FFreeAd. Other slots: (0,29) FFreeAd.
Description: none. Handler 0x661065FC, dispatch slot 0x66107FE4, modOpcodes line 728.
FFreeStr
(0,0x32)emittedprimary of 2handler #49Stack & frameinferred_corpus365 corpus hitsFFreeStr.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Private Declare Function P Lib "x.dll" () As String
Public Sub Main()
Dim s As String
s = P()
End Sub
Encoding, evidence and notes
Encoding: 32, then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 32 0400 [4 bytes] FFreeStr var_8C var_90
Form1.LoadPlugins @ 0x4644FC | 464737 32 0800 [8 bytes] FFreeStr var_9C var_16C var_170 var_174
Form1.LoadPlugins @ 0x4644FC | 4647E8 32 0400 [4 bytes] FFreeStr var_16C var_9C
Form1.RegisterPlugin @ 0x44CB20 | 44CBF6 32 0800 [8 bytes] FFreeStr var_AC var_B0 var_B4 var_B8
365 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_32_FFreeStr.
Handler: 0x66106598, shared by 2 dispatch slots (real opcode #49). This is the primary slot. Other slots: (4,B3) FFreeStr.
Corpus: 365 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106598, dispatch slot 0x66106DDC, modOpcodes line 724.
FFreeStr
(4,0xB3)not emitteddup of (0,32)handler #49Stack & frameconfirmed_handlerFFreeStr.Encoding, evidence and notes
Encoding: FE B3 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106598, shared by 2 dispatch slots (real opcode #49). This is a duplicate slot of (0,32) FFreeStr. Other slots: (0,32) FFreeStr.
Description: none. Handler 0x66106598, dispatch slot 0x66107FE0, modOpcodes line 725.
FFreeVar
(0,0x36)emittedprimary of 2handler #53Stack & frameinferred_corpus856 corpus hitsFFreeVar.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Public Sub Main()
Dim o As Object, v As Variant
v = o.A.B.C
End Sub
Encoding, evidence and notes
Encoding: 36, then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 36 0400 [4 bytes] FFreeVar var_A8 var_B8
Form1.LoadPlugins @ 0x4644FC | 46457F 36 0C00 [12 bytes] FFreeVar var_AC var_CC var_EC var_10C var_12C var_14C
Form1.LoadPlugins @ 0x4644FC | 4645D6 36 0400 [4 bytes] FFreeVar var_AC var_CC
Form1.LoadPlugins @ 0x4644FC | 4646DD 36 0800 [8 bytes] FFreeVar var_AC var_CC var_EC var_10C
856 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_36_FFreeVar.
Handler: 0x661065C4, shared by 2 dispatch slots (real opcode #53). This is the primary slot. Other slots: (4,B2) FFreeVar.
Corpus: 856 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661065C4, dispatch slot 0x66106DEC, modOpcodes line 722.
FFreeVar
(4,0xB2)not emitteddup of (0,36)handler #53Stack & frameconfirmed_handlerFFreeVar.Encoding, evidence and notes
Encoding: FE B2 (lead byte FE selects table 4), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661065C4, shared by 2 dispatch slots (real opcode #53). This is a duplicate slot of (0,36) FFreeVar. Other slots: (0,36) FFreeVar.
Description: none. Handler 0x661065C4, dispatch slot 0x66107FDC, modOpcodes line 723.
FreeAdNoPop
(4,0xCE)not emittedhandler #690Stack & frameconfirmed_msdocsFreeAdNoPop.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Encoding, evidence and notes
Encoding: FE CE (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B7E0, unique to this slot (real opcode #690).
Description: draft, by claude-opus-4.7. Handler 0x6610B7E0, dispatch slot 0x6610804C, modOpcodes line 734.
FreeStrNoPop
(4,0xCC)not emittedhandler #688Stack & frameconfirmed_msdocsFreeStrNoPop.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Encoding, evidence and notes
Encoding: FE CC (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B7BF, unique to this slot (real opcode #688).
Description: draft, by claude-opus-4.7. Handler 0x6610B7BF, dispatch slot 0x66108044, modOpcodes line 732.
FreeVarNoPop
(4,0xCD)not emittedhandler #689Stack & frameconfirmed_msdocsFreeVarNoPop.Releases reference-counted resources (BSTRs, Variants, object refs) held in one or more frame slots. Variable-length variants (FFreeVar, FFreeStr, FFreeAd) consume a count byte followed by that many 2-byte slot offsets.
Inserted by the compiler at procedure exits and after temporary expressions to balance lifetime of allocated values.
Emitted at every procedure cleanup point and after any expression that produced a heap value into a tracked slot.
Encoding, evidence and notes
Encoding: FE CD (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B801, unique to this slot (real opcode #689).
Description: draft, by claude-opus-4.7. Handler 0x6610B801, dispatch slot 0x66108048, modOpcodes line 733.
FMem_Load
Frame+offset member load Prefix: F + Mem
FMemLdCy
(0,0x95)emittedprimary of 3handler #146Currencyinferred_corpusReads a Currency (scaled 64-bit integer), and pushes it from a field reached through a pointer held in a frame slot.
Stack: [...] -> [..., v:Cy]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Currency. The storage class selects the prefix (FMem); the value class selects the suffix (Cy).
Dim g As Currency
Public Sub Main()
Dim b As Currency
b = g
End Sub
Encoding, evidence and notes
Encoding: 95, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 95 08000000 FMemLdCy [this+0x0]
95 08000000 FMemLdCy [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_95_FMemLdCy.
Handler: 0x6610AF41, shared by 3 dispatch slots (real opcode #146). This is the primary slot. Other slots: (3,D4) FMemLdR8, (3,D5) FMemLdR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Currency
Public Sub Main()
Dim b As Currency
b = g
End Sub(3,0xD4) FMemLdR8, (3,0xD5) FMemLdR8
Description: draft, by claude-opus-5-5. Handler 0x6610AF41, dispatch slot 0x66106F68, modOpcodes line 1048.
FMemLdFPR4
(0,0x96)emittedprimary of 2handler #147Floating pointinferred_corpusReads a Single, moved through the FPU (fld/fstp dword), and pushes it from a field reached through a pointer held in a frame slot.
Stack: [...] -> [..., v:FPR4]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Single. The storage class selects the prefix (FMem); the value class selects the suffix (FPR4).
Dim g As Single
Public Sub Main()
Dim b As Single
b = g
End Sub
Encoding, evidence and notes
Encoding: 96, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 96 08000000 FMemLdFPR4 [this+0x0]
96 08000000 FMemLdFPR4 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_96_FMemLdFPR4.
Handler: 0x6610AF65, shared by 2 dispatch slots (real opcode #147). This is the primary slot. Other slots: (3,D9) FMemLdFPR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Single
Public Sub Main()
Dim b As Single
b = g
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AF65, dispatch slot 0x66106F6C, modOpcodes line 1049.
FMemLdFPR4
(3,0xD9)not emitteddup of (0,96)handler #147Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD D9 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AF65, shared by 2 dispatch slots (real opcode #147). This is a duplicate slot of (0,96) FMemLdFPR4. Other slots: (0,96) FMemLdFPR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x6610AF65, dispatch slot 0x66107C78, modOpcodes line 1065.
FMemLdFPR8
(0,0x97)emittedprimary of 2handler #148Floating pointinferred_corpusReads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from a field reached through a pointer held in a frame slot.
Stack: [...] -> [..., v:FPR8]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Double/Date. The storage class selects the prefix (FMem); the value class selects the suffix (FPR8).
Dim g As Date
Public Sub Main()
Dim b As Date
b = g
End Sub
Encoding, evidence and notes
Encoding: 97, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 97 08000000 FMemLdFPR8 [this+0x0]
97 08000000 FMemLdFPR8 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_97_FMemLdFPR8.
Handler: 0x6610AF86, shared by 2 dispatch slots (real opcode #148). This is the primary slot. Other slots: (3,DA) FMemLdFPR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Date
Public Sub Main()
Dim b As Date
b = g
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AF86, dispatch slot 0x66106F70, modOpcodes line 1050.
FMemLdFPR8
(3,0xDA)not emitteddup of (0,97)handler #148Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD DA (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AF86, shared by 2 dispatch slots (real opcode #148). This is a duplicate slot of (0,97) FMemLdFPR8. Other slots: (0,97) FMemLdFPR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x6610AF86, dispatch slot 0x66107C7C, modOpcodes line 1066.
FMemLdI2
(0,0x93)emittedprimary of 2handler #144Integerinferred_corpus2 corpus hitsFMemLdI2).First dereferences a frame slot (typically holding an object pointer) and then reads a member at compile-time-known offset. Combined frame-load + member-load step.
Emitted when reading a field of an object referenced by a local variable.
Dim g As Boolean
Public Sub Main()
Dim b As Boolean
b = g
End Sub
Encoding, evidence and notes
Encoding: 93, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 93 08000000 FMemLdI2 [this+0x0]
b64.Proc_464C2C @ 0x464C2C | 464C2C 93 08003800 FMemLdI2 [this+0x38]
b64.Proc_469B0C @ 0x469B0C | 469B0C 93 08003800 FMemLdI2 [this+0x38]
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_93_FMemLdI2.
Handler: 0x66106017, shared by 2 dispatch slots (real opcode #144). This is the primary slot. Other slots: (3,D1) FMemLdI2.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106017, dispatch slot 0x66106F60, modOpcodes line 1046.
FMemLdI2
(3,0xD1)not emitteddup of (0,93)handler #144Integerconfirmed_handlerFMemLdI2).Encoding, evidence and notes
Encoding: FD D1 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106017, shared by 2 dispatch slots (real opcode #144). This is a duplicate slot of (0,93) FMemLdI2. Other slots: (0,93) FMemLdI2.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x66106017, dispatch slot 0x66107C58, modOpcodes line 1058.
FMemLdPr
(0,0x5F)emittedprimary of 2handler #92Object / COMinferred_corpusReads an object/structure pointer, which is loaded into the interpreter's cached object register (pr, [ebp-4Ch]) for following Mem* opcodes, and pushes it from a field reached through a pointer held in a frame slot.
Stack: [...] -> [..., v:Pr]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for reads of a field reached through a pointer held in a frame slot when the value is a object pointer to pr. The storage class selects the prefix (FMem); the value class selects the suffix (Pr).
Private Type TR
c As Collection
End Type
Dim gr As TR
Public Sub Main()
Dim n As Long
n = gr.c.Count
End Sub
Encoding, evidence and notes
Encoding: 5F, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 5F 08000000 FMemLdPr [this+0x0]
5F 08000000 FMemLdPr [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5F_FMemLdPr.
Handler: 0x661062D8, shared by 2 dispatch slots (real opcode #92). This is the primary slot. Other slots: (3,DB) FMemLdPr.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TR
c As Collection
End Type
Dim gr As TR
Public Sub Main()
Dim n As Long
n = gr.c.Count
End SubDescription: draft, by claude-opus-5-5. Handler 0x661062D8, dispatch slot 0x66106E90, modOpcodes line 1056.
FMemLdPr
(3,0xDB)not emitteddup of (0,5F)handler #92Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FD DB (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661062D8, shared by 2 dispatch slots (real opcode #92). This is a duplicate slot of (0,5F) FMemLdPr. Other slots: (0,5F) FMemLdPr.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x661062D8, dispatch slot 0x66107C80, modOpcodes line 1067.
FMemLdR4
(0,0x94)emittedprimary of 5handler #145Integerinferred_corpus29 corpus hitsReads the base pointer from frame slot %a, adds the 16-bit offset %2 and pushes the 32-bit value found there.
Stack: [...] -> [..., v:R4]
Emitted for 4-byte reads (Long, Single bit patterns, String/Object pointers) of: module variables in ActiveX DLL/EXE projects (per-thread data, vbdec [this+off]), fields of a ByRef UDT parameter, and fields of a UDT inside a With block (the block's address is kept in a frame temporary).
Dim g As Long
Public Sub Main()
Dim b As Long
b = g
End Sub
Encoding, evidence and notes
Encoding: 94, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 94 08000000 FMemLdR4 [this+0x0]
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6AC 94 08000400 FMemLdR4 [this+0x4]
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6C4 94 08000400 FMemLdR4 [this+0x4]
modZLIB.Proc_43E804 @ 0x43E804 | 43E804 94 08000000 FMemLdR4 [this+0x0]
29 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_94_FMemLdR4.
Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is the primary slot. Other slots: (3,D2) FMemLdR4, (3,D3) FMemLdR4, (3,D7) FMemLdR4, (3,D8) FMemLdR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 29 occurrence(s) in PDFStreamDumper_p.exe.
Private Type TR
a As Long
b As Long
End Type
Sub Main()
Dim r As TR, n As Long
With r
n = .b
End With
End Sub(3,0xD2) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD7) FMemLdR4, (3,0xD8) FMemLdR4
Description: draft, by claude-opus-5-5. Handler 0x6610603E, dispatch slot 0x66106F64, modOpcodes line 1047.
FMemLdR4
(3,0xD2)not emitteddup of (0,94)handler #145Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD D2 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D3) FMemLdR4, (3,D7) FMemLdR4, (3,D8) FMemLdR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x94) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD7) FMemLdR4, (3,0xD8) FMemLdR4
Description: none. Handler 0x6610603E, dispatch slot 0x66107C5C, modOpcodes line 1059.
FMemLdR4
(3,0xD3)not emitteddup of (0,94)handler #145Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD D3 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D2) FMemLdR4, (3,D7) FMemLdR4, (3,D8) FMemLdR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x94) FMemLdR4, (3,0xD2) FMemLdR4, (3,0xD7) FMemLdR4, (3,0xD8) FMemLdR4
Description: none. Handler 0x6610603E, dispatch slot 0x66107C60, modOpcodes line 1060.
FMemLdR4
(3,0xD7)not emitteddup of (0,94)handler #145Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD D7 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D2) FMemLdR4, (3,D3) FMemLdR4, (3,D8) FMemLdR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x94) FMemLdR4, (3,0xD2) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD8) FMemLdR4
Description: none. Handler 0x6610603E, dispatch slot 0x66107C70, modOpcodes line 1063.
FMemLdR4
(3,0xD8)not emitteddup of (0,94)handler #145Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD D8 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610603E, shared by 5 dispatch slots (real opcode #145). This is a duplicate slot of (0,94) FMemLdR4. Other slots: (0,94) FMemLdR4, (3,D2) FMemLdR4, (3,D3) FMemLdR4, (3,D7) FMemLdR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x94) FMemLdR4, (3,0xD2) FMemLdR4, (3,0xD3) FMemLdR4, (3,0xD7) FMemLdR4
Description: none. Handler 0x6610603E, dispatch slot 0x66107C74, modOpcodes line 1064.
FMemLdR8
(3,0xD4)not emitteddup of (0,95)handler #146Currencyinferred_corpusEncoding, evidence and notes
Encoding: FD D4 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AF41, shared by 3 dispatch slots (real opcode #146). This is a duplicate slot of (0,95) FMemLdCy. Other slots: (0,95) FMemLdCy, (3,D5) FMemLdR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x95) FMemLdCy, (3,0xD5) FMemLdR8
Description: none. Handler 0x6610AF41, dispatch slot 0x66107C64, modOpcodes line 1061.
FMemLdR8
(3,0xD5)not emitteddup of (0,95)handler #146Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD D5 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AF41, shared by 3 dispatch slots (real opcode #146). This is a duplicate slot of (0,95) FMemLdCy. Other slots: (0,95) FMemLdCy, (3,D4) FMemLdR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x95) FMemLdCy, (3,0xD4) FMemLdR8
Description: none. Handler 0x6610AF41, dispatch slot 0x66107C68, modOpcodes line 1062.
FMemLdRf
(0,0x07)emittedprimary of 3handler #6Stack & frameinferred_corpus27 corpus hitsFMemLdRf).First dereferences a frame slot (typically holding an object pointer) and then reads a member at compile-time-known offset. Combined frame-load + member-load step.
Emitted when reading a field of an object referenced by a local variable.
Dim g As Boolean
Public Sub Main()
P g
End Sub
Sub P(x As Boolean)
End Sub
Encoding, evidence and notes
Encoding: 07, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 07 08000000 FMemLdRf [this+0x0]
modZLIB.Proc_45E44C @ 0x45E44C | 45E4C8 07 34FF0400 FMemLdRf [var_CC+0x4]
modZLIB.Proc_4666C0 @ 0x4666C0 | 46673E 07 20FF0400 FMemLdRf [var_E0+0x4]
modCrc.Proc_446CFC @ 0x446CFC | 446D0E 07 08000000 FMemLdRf [this+0x0]
27 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_07_FMemLdRf.
Handler: 0x66106063, shared by 3 dispatch slots (real opcode #6). This is the primary slot. Other slots: (3,D6) FMemLdRf, (3,DC) FMemLdRf.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.
(3,0xD6) FMemLdRf, (3,0xDC) FMemLdRf
Description: draft, by claude-opus-4.7. Handler 0x66106063, dispatch slot 0x66106D30, modOpcodes line 1041.
FMemLdRf
(3,0xD6)not emitteddup of (0,07)handler #6Stack & frameconfirmed_handlerFMemLdRf).Encoding, evidence and notes
Encoding: FD D6 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106063, shared by 3 dispatch slots (real opcode #6). This is a duplicate slot of (0,07) FMemLdRf. Other slots: (0,07) FMemLdRf, (3,DC) FMemLdRf.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x07) FMemLdRf, (3,0xDC) FMemLdRf
Description: none. Handler 0x66106063, dispatch slot 0x66107C6C, modOpcodes line 1042.
FMemLdRf
(3,0xDC)not emitteddup of (0,07)handler #6Stack & frameconfirmed_handlerFMemLdRf).Encoding, evidence and notes
Encoding: FD DC (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106063, shared by 3 dispatch slots (real opcode #6). This is a duplicate slot of (0,07) FMemLdRf. Other slots: (0,07) FMemLdRf, (3,D6) FMemLdRf.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x07) FMemLdRf, (3,0xD6) FMemLdRf
Description: none. Handler 0x66106063, dispatch slot 0x66107C84, modOpcodes line 1043.
FMemLdUI1
(3,0xD0)emittedhandler #573Integerinferred_corpusReads a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and pushes it from a field reached through a pointer held in a frame slot.
Stack: [...] -> [..., v:UI1]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for reads of a field reached through a pointer held in a frame slot when the value is a Byte. The storage class selects the prefix (FMem); the value class selects the suffix (UI1).
Dim g As Byte
Public Sub Main()
Dim b As Byte
b = g
End Sub
Encoding, evidence and notes
Encoding: FD D0 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDD0 08000000 FMemLdUI1 [this+0x0]
FDD0 08000000 FMemLdUI1 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_D0_FMemLdUI1.
Handler: 0x6610AF1F, unique to this slot (real opcode #573).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Byte
Public Sub Main()
Dim b As Byte
b = g
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AF1F, dispatch slot 0x66107C54, modOpcodes line 1057.
FMemLdVar
(3,0xDD)not emittedhandler #574Variantinferred_corpusEncoding, evidence and notes
Encoding: FD DD (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B14F, unique to this slot (real opcode #574).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x6610B14F, dispatch slot 0x66107C88, modOpcodes line 1068.
FMem_Store
Frame+offset member store Prefix: F + Mem
FMemStAd
(3,0xE8)emittedhandler #578Object / COMinferred_corpusPops an object pointer (Set). The destination's old reference is Released and the new one is AddRef'd, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Ad] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object reference. The storage class selects the prefix (FMem); the value class selects the suffix (Ad).
Private Type TRec
pad As Long
f As Object
End Type
Dim gr As TRec
Public Sub Main()
Dim b As Object
Set gr.f = New Collection
End Sub
Encoding, evidence and notes
Encoding: FD E8 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDE8 08000400 FMemStAd [this+0x4]
FDE8 08000400 FMemStAd [this+0x4]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E8_FMemStAd.
Handler: 0x661063DC, unique to this slot (real opcode #578).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
pad As Long
f As Object
End Type
Dim gr As TRec
Public Sub Main()
Dim b As Object
Set gr.f = New Collection
End SubDescription: draft, by claude-opus-5-5. Handler 0x661063DC, dispatch slot 0x66107CB4, modOpcodes line 1076.
FMemStAdFunc
(3,0xEF)emittedhandler #583Object / COMinferred_corpusPops an object pointer returned by a function call (Set x = F()). The returned reference is adopted without an extra AddRef, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Ad] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object reference from a call. The storage class selects the prefix (FMem); the value class selects the suffix (AdFunc).
Dim g As Object
Public Sub Main()
Set g = New Collection
Dim b As Object
End Sub
Encoding, evidence and notes
Encoding: FD EF (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDEF 08000000 FMemStAdFunc [this+0x0]
FDEF 08000000 FMemStAdFunc [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EF_FMemStAdFunc.
Handler: 0x661063BE, unique to this slot (real opcode #583).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Object
Public Sub Main()
Set g = New Collection
Dim b As Object
End SubDescription: draft, by claude-opus-5-5. Handler 0x661063BE, dispatch slot 0x66107CD0, modOpcodes line 1083.
FMemStFPR4
(0,0x9B)emittedprimary of 2handler #152Floating pointinferred_corpusPops a Single, moved through the FPU (fld/fstp dword), and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:FPR4] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Single. The storage class selects the prefix (FMem); the value class selects the suffix (FPR4).
Dim g As Single
Public Sub Main()
g = 1.5!
Dim b As Single
End Sub
Encoding, evidence and notes
Encoding: 9B, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 9B 08000000 FMemStFPR4 [this+0x0]
9B 08000000 FMemStFPR4 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9B_FMemStFPR4.
Handler: 0x6610AFF6, shared by 2 dispatch slots (real opcode #152). This is the primary slot. Other slots: (3,E9) FMemStFPR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Single
Public Sub Main()
g = 1.5!
Dim b As Single
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AFF6, dispatch slot 0x66106F80, modOpcodes line 1054.
FMemStFPR4
(3,0xE9)not emitteddup of (0,9B)handler #152Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD E9 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AFF6, shared by 2 dispatch slots (real opcode #152). This is a duplicate slot of (0,9B) FMemStFPR4. Other slots: (0,9B) FMemStFPR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x6610AFF6, dispatch slot 0x66107CB8, modOpcodes line 1077.
FMemStFPR8
(0,0x9C)emittedprimary of 2handler #153Floating pointinferred_corpusPops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:FPR8] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Double/Date. The storage class selects the prefix (FMem); the value class selects the suffix (FPR8).
Dim g As Date
Public Sub Main()
g = #1/1/2000#
Dim b As Date
End Sub
Encoding, evidence and notes
Encoding: 9C, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 9C 08000000 FMemStFPR8 [this+0x0]
9C 08000000 FMemStFPR8 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9C_FMemStFPR8.
Handler: 0x6610B021, shared by 2 dispatch slots (real opcode #153). This is the primary slot. Other slots: (3,EA) FMemStFPR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Date
Public Sub Main()
g = #1/1/2000#
Dim b As Date
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B021, dispatch slot 0x66106F84, modOpcodes line 1055.
FMemStFPR8
(3,0xEA)not emitteddup of (0,9C)handler #153Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD EA (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B021, shared by 2 dispatch slots (real opcode #153). This is a duplicate slot of (0,9C) FMemStFPR8. Other slots: (0,9C) FMemStFPR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x6610B021, dispatch slot 0x66107CBC, modOpcodes line 1078.
FMemStI2
(0,0x98)emittedprimary of 2handler #149Integerinferred_corpus1 corpus hitsFMemStI2).Mirror of FMemLd*. Dereferences a frame slot for an object pointer, writes a value at the member offset.
Emitted when writing a field of an object referenced by a local.
Dim g As Boolean
Public Sub Main()
g = True
Dim b As Boolean
End Sub
Encoding, evidence and notes
Encoding: 98, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 98 08000000 FMemStI2 [this+0x0]
b64.Proc_478E48 @ 0x478E48 | 479D4D 98 08003800 FMemStI2 [this+0x38]
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_98_FMemStI2.
Handler: 0x66106087, shared by 2 dispatch slots (real opcode #149). This is the primary slot. Other slots: (3,E1) FMemStI2.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106087, dispatch slot 0x66106F74, modOpcodes line 1051.
FMemStI2
(3,0xE1)not emitteddup of (0,98)handler #149Integerconfirmed_handlerFMemStI2).Encoding, evidence and notes
Encoding: FD E1 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106087, shared by 2 dispatch slots (real opcode #149). This is a duplicate slot of (0,98) FMemStI2. Other slots: (0,98) FMemStI2.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x66106087, dispatch slot 0x66107C98, modOpcodes line 1070.
FMemStI4
(0,0x99)emittedprimary of 3handler #150Integerinferred_corpus18 corpus hitsFMemStI4).Mirror of FMemLd*. Dereferences a frame slot for an object pointer, writes a value at the member offset.
Emitted when writing a field of an object referenced by a local.
Dim g As Long
Public Sub Main()
g = 70000
Dim b As Long
End Sub
Encoding, evidence and notes
Encoding: 99, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 99 08000000 FMemStI4 [this+0x0]
modZLIB.Proc_43E6AC @ 0x43E6AC | 43E6BF 99 08000400 FMemStI4 [this+0x4]
modZLIB.Proc_43D378 @ 0x43D378 | 43D37B 99 08000400 FMemStI4 [this+0x4]
modZLIB.Proc_45E44C @ 0x45E44C | 45E4DC 99 34FF0400 FMemStI4 [var_CC+0x4]
18 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_99_FMemStI4.
Handler: 0x661060AE, shared by 3 dispatch slots (real opcode #150). This is the primary slot. Other slots: (3,E2) FMemStR4, (3,E3) FMemStR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Corpus: 18 occurrence(s) in PDFStreamDumper_p.exe.
(3,0xE2) FMemStR4, (3,0xE3) FMemStR4
Description: draft, by claude-opus-4.7. Handler 0x661060AE, dispatch slot 0x66106F78, modOpcodes line 1052.
FMemStR4
(3,0xE2)not emitteddup of (0,99)handler #150Integerinferred_corpusFMemStI4).Encoding, evidence and notes
Encoding: FD E2 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661060AE, shared by 3 dispatch slots (real opcode #150). This is a duplicate slot of (0,99) FMemStI4. Other slots: (0,99) FMemStI4, (3,E3) FMemStR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x99) FMemStI4, (3,0xE3) FMemStR4
Description: none. Handler 0x661060AE, dispatch slot 0x66107C9C, modOpcodes line 1071.
FMemStR4
(3,0xE3)not emitteddup of (0,99)handler #150Integerconfirmed_handlerFMemStI4).Encoding, evidence and notes
Encoding: FD E3 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661060AE, shared by 3 dispatch slots (real opcode #150). This is a duplicate slot of (0,99) FMemStI4. Other slots: (0,99) FMemStI4, (3,E2) FMemStR4.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x99) FMemStI4, (3,0xE2) FMemStR4
Description: none. Handler 0x661060AE, dispatch slot 0x66107CA0, modOpcodes line 1072.
FMemStR8
(0,0x9A)emittedprimary of 3handler #151Currencyinferred_corpusPops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:R8] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a 8-byte value. The storage class selects the prefix (FMem); the value class selects the suffix (R8).
Dim g As Currency
Public Sub Main()
g = 1.5@
Dim b As Currency
End Sub
Encoding, evidence and notes
Encoding: 9A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 9A 08000000 FMemStR8 [this+0x0]
9A 08000000 FMemStR8 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_9A_FMemStR8.
Handler: 0x6610AFD2, shared by 3 dispatch slots (real opcode #151). This is the primary slot. Other slots: (3,E4) FMemStR8, (3,E5) FMemStR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Currency
Public Sub Main()
g = 1.5@
Dim b As Currency
End Sub(3,0xE4) FMemStR8, (3,0xE5) FMemStR8
Description: draft, by claude-opus-5-5. Handler 0x6610AFD2, dispatch slot 0x66106F7C, modOpcodes line 1053.
FMemStR8
(3,0xE4)not emitteddup of (0,9A)handler #151Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD E4 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AFD2, shared by 3 dispatch slots (real opcode #151). This is a duplicate slot of (0,9A) FMemStR8. Other slots: (0,9A) FMemStR8, (3,E5) FMemStR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x9A) FMemStR8, (3,0xE5) FMemStR8
Description: none. Handler 0x6610AFD2, dispatch slot 0x66107CA4, modOpcodes line 1073.
FMemStR8
(3,0xE5)not emitteddup of (0,9A)handler #151Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD E5 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AFD2, shared by 3 dispatch slots (real opcode #151). This is a duplicate slot of (0,9A) FMemStR8. Other slots: (0,9A) FMemStR8, (3,E4) FMemStR8.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
(0,0x9A) FMemStR8, (3,0xE4) FMemStR8
Description: none. Handler 0x6610AFD2, dispatch slot 0x66107CA8, modOpcodes line 1074.
FMemStStr
(3,0xE7)emittedhandler #577Stringinferred_corpusPops a String (BSTR pointer); ownership of the BSTR is transferred and the old value is freed, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Str] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a String. The storage class selects the prefix (FMem); the value class selects the suffix (Str).
Private Type TR
s As String
v As Variant
End Type
Dim gs As String, gr As TR
Public Sub Main()
Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
gs = F()
End Sub
Function F() As String
End Function
' ---- modG.bas
Public ps As String
Encoding, evidence and notes
Encoding: FD E7 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDE7 08000000 FMemStStr [this+0x0]
FDE7 08000000 FMemStStr [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E7_FMemStStr.
Handler: 0x6610636C, unique to this slot (real opcode #577).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TR
s As String
v As Variant
End Type
Dim gs As String, gr As TR
Public Sub Main()
Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
gs = F()
End Sub
Function F() As String
End Function
' ---- modG.bas
Public ps As StringDescription: draft, by claude-opus-5-5. Handler 0x6610636C, dispatch slot 0x66107CB0, modOpcodes line 1044.
FMemStStrCopy
(0,0x54)emittedprimary of 2handler #82Stringinferred_corpus2 corpus hits via [frame[%a] + offset] (FMemStStrCopy`).Mirror of FMemLd*. Dereferences a frame slot for an object pointer, writes a value at the member offset.
Emitted when writing a field of an object referenced by a local.
Dim g As String
Public Sub Main()
g = "abc"
Dim b As String
End Sub
Encoding, evidence and notes
Encoding: 54, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 54 08000000 FMemStStrCopy [this+0x0]
modZLIB.Proc_43E804 @ 0x43E804 | 43E817 54 08000000 FMemStStrCopy [this+0x0]
modZLIB.Proc_43D3B4 @ 0x43D3B4 | 43D3B7 54 08000000 FMemStStrCopy [this+0x0]
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_54_FMemStStrCopy.
Handler: 0x66106386, shared by 2 dispatch slots (real opcode #82). This is the primary slot. Other slots: (3,F1) FMemStStrCopy.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106386, dispatch slot 0x66106E64, modOpcodes line 1045.
FMemStStrCopy
(3,0xF1)not emitteddup of (0,54)handler #82Stringconfirmed_handler via [frame[%a] + offset] (FMemStStrCopy`).Encoding, evidence and notes
Encoding: FD F1 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106386, shared by 2 dispatch slots (real opcode #82). This is a duplicate slot of (0,54) FMemStStrCopy. Other slots: (0,54) FMemStStrCopy.
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Description: none. Handler 0x66106386, dispatch slot 0x66107CD8, modOpcodes line 1085.
FMemStUI1
(3,0xE0)emittedhandler #575Integerinferred_corpusPops a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:UI1] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Byte. The storage class selects the prefix (FMem); the value class selects the suffix (UI1).
Dim g As Byte
Public Sub Main()
g = 7
Dim b As Byte
End Sub
Encoding, evidence and notes
Encoding: FD E0 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDE0 08000000 FMemStUI1 [this+0x0]
FDE0 08000000 FMemStUI1 [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E0_FMemStUI1.
Handler: 0x6610AFB1, unique to this slot (real opcode #575).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Byte
Public Sub Main()
g = 7
Dim b As Byte
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AFB1, dispatch slot 0x66107C94, modOpcodes line 1069.
FMemStVar
(3,0xE6)emittedhandler #576Variantinferred_corpusPops a Variant (16 bytes); the source Variant is moved and the old destination value is cleared, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Var] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (Var).
Dim g As Variant
Public Sub Main()
g = 5
Dim b As Variant
End Sub
Encoding, evidence and notes
Encoding: FD E6 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDE6 08000000 FMemStVar [this+0x0]
FDE6 08000000 FMemStVar [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_E6_FMemStVar.
Handler: 0x6610B72B, unique to this slot (real opcode #576).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim g As Variant
Public Sub Main()
g = 5
Dim b As Variant
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B72B, dispatch slot 0x66107CAC, modOpcodes line 1075.
FMemStVarAd
(3,0xEB)emittedhandler #579Variantinferred_corpusPops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Var] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarAd).
Dim gv As Variant, go As Object, gu As IUnknown
Public Sub Main()
Dim o As Object, u As IUnknown
Set gv = o
End Sub
Encoding, evidence and notes
Encoding: FD EB (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDEB 08000000 FMemStVarAd [this+0x0]
FDEB 08000000 FMemStVarAd [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EB_FMemStVarAd.
Handler: 0x6610B4B1, unique to this slot (real opcode #579).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gv As Variant, go As Object, gu As IUnknown
Public Sub Main()
Dim o As Object, u As IUnknown
Set gv = o
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B4B1, dispatch slot 0x66107CC0, modOpcodes line 1079.
FMemStVarAdFunc
(3,0xEC)emittedhandler #580Variantinferred_corpusPops an object pointer returned by a call, stored into a Variant as VT_DISPATCH and adopted without an extra AddRef, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Var] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a object from a call into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarAdFunc).
Dim gv As Variant, go As Object, gu As IUnknown
Public Sub Main()
Dim o As Object, u As IUnknown
Set gv = New Collection
End Sub
Encoding, evidence and notes
Encoding: FD EC (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDEC 08000000 FMemStVarAdFunc [this+0x0]
FDEC 08000000 FMemStVarAdFunc [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EC_FMemStVarAdFunc.
Handler: 0x6610B490, unique to this slot (real opcode #580).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gv As Variant, go As Object, gu As IUnknown
Public Sub Main()
Dim o As Object, u As IUnknown
Set gv = New Collection
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B490, dispatch slot 0x66107CC4, modOpcodes line 1080.
FMemStVarCopy
(3,0xF0)emittedhandler #584Variantinferred_corpusPops a Variant, deep-copied with VariantCopy semantics; the old destination value is cleared, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Var] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a Variant (copied). The storage class selects the prefix (FMem); the value class selects the suffix (VarCopy).
Private Type TRec
pad As Long
f As Variant
End Type
Public Sub Main()
Dim r As TRec
End Sub
Private Sub P(x As TRec)
Dim b As Variant
x.f = b
b = x.f
End Sub
Encoding, evidence and notes
Encoding: FD F0 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDF0 0C000400 FMemStVarCopy [arg_C+0x4]
FDF0 0C000400 FMemStVarCopy [arg_C+0x4]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F0_FMemStVarCopy.
Handler: 0x6610648A, unique to this slot (real opcode #584).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
pad As Long
f As Variant
End Type
Public Sub Main()
Dim r As TRec
End Sub
Private Sub P(x As TRec)
Dim b As Variant
x.f = b
b = x.f
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610648A, dispatch slot 0x66107CD4, modOpcodes line 1084.
FMemStVarUnk
(3,0xED)emittedhandler #581Variantinferred_corpusPops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Var] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a IUnknown into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarUnk).
Dim gv As Variant, gu As IUnknown
Public Sub Main()
Dim u As IUnknown
Set gv = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding: FD ED (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDED 08000000 FMemStVarUnk [this+0x0]
FDED 08000000 FMemStVarUnk [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_ED_FMemStVarUnk.
Handler: 0x6610B652, unique to this slot (real opcode #581).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gv As Variant, gu As IUnknown
Public Sub Main()
Dim u As IUnknown
Set gv = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B652, dispatch slot 0x66107CC8, modOpcodes line 1081.
FMemStVarUnkFunc
(3,0xEE)emittedhandler #582Variantinferred_corpusPops an IUnknown pointer returned by a call, stored into a Variant as VT_UNKNOWN without an extra AddRef, and writes it to a field reached through a pointer held in a frame slot.
Stack: [..., v:Var] -> [...]
Operands: %a: frame slot holding the base pointer; %2: byte offset added to it.
Two observed uses: (1) ActiveX DLL/EXE module variables, where the frame slot holds the per-thread data block and vbdec shows [this+off]; (2) fields of a UDT passed ByRef, where the frame slot is the argument ([arg_C+off]).
Emitted for assignments to a field reached through a pointer held in a frame slot when the value is a IUnknown from a call into a Variant. The storage class selects the prefix (FMem); the value class selects the suffix (VarUnkFunc).
Dim gv As Variant, gu As IUnknown
Public Sub Main()
Dim u As IUnknown
Set gv = FU()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding: FD EE (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: [%a+%2]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(+): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FDEE 08000000 FMemStVarUnkFunc [this+0x0]
FDEE 08000000 FMemStVarUnkFunc [this+0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_EE_FMemStVarUnkFunc.
Handler: 0x6610B62D, unique to this slot (real opcode #582).
Family note: Phase 4: in ActiveX DLL/EXE projects, .bas module variables are per-thread. Every access goes through the per-thread data block whose pointer sits in a frame slot, and vbdec shows it as [this+off]. This family (and FMem_Store) is how such globals are read and written. Standard-EXE globals use ImpAd* instead.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gv As Variant, gu As IUnknown
Public Sub Main()
Dim u As IUnknown
Set gv = FU()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B62D, dispatch slot 0x66107CCC, modOpcodes line 1082.
F_Load
Frame-relative load (variable at [ebp+%a]) Prefix: F = frame (local var or arg)
FLdFPR4
(0,0x6E)emittedprimary of 2handler #107Floating pointinferred_corpus122 corpus hitsFLdFPR4.Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: FPR4.
Emitted for every read of a typed local or argument outside of specialized paths.
Public Sub Main()
Dim a As Single, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: 6E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 6E 78FF FLdFPR4 var_88
Form1.Form_Resize @ 0x474F3C | 474F5E 6E 70FF FLdFPR4 var_90
Form1.Form_Resize @ 0x474F3C | 474F83 6E 70FF FLdFPR4 var_90
Form1.Form_Resize @ 0x474F3C | 474F9A 6E 70FF FLdFPR4 var_90
122 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6E_FLdFPR4.
Handler: 0x66105651, shared by 2 dispatch slots (real opcode #107). This is the primary slot. Other slots: (2,E9) FLdFPR4.
Corpus: 122 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105651, dispatch slot 0x66106ECC, modOpcodes line 1097.
FLdFPR4
(2,0xE9)not emitteddup of (0,6E)handler #107Floating pointconfirmed_handlerFLdFPR4.Encoding, evidence and notes
Encoding: FC E9 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105651, shared by 2 dispatch slots (real opcode #107). This is a duplicate slot of (0,6E) FLdFPR4. Other slots: (0,6E) FLdFPR4.
Description: none. Handler 0x66105651, dispatch slot 0x661078B8, modOpcodes line 1113.
FLdFPR8
(0,0x6F)emittedprimary of 2handler #108Floating pointinferred_corpus11 corpus hitsFLdFPR8.Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: FPR8.
Emitted for every read of a typed local or argument outside of specialized paths.
Public Sub Main()
Dim d As Date, v As Variant
v = d
End Sub
Encoding, evidence and notes
Encoding: 6F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 6F 74FF FLdFPR8 var_8C
Form2.LongHex @ 0x441B00 | 441B02 6F 0C00 FLdFPR8 arg_C
Form2.LongHex @ 0x441B00 | 441B0E 6F 0C00 FLdFPR8 arg_C
Form2.LongHex @ 0x441B00 | 441B11 6F 70FF FLdFPR8 var_90
11 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6F_FLdFPR8.
Handler: 0x66105666, shared by 2 dispatch slots (real opcode #108). This is the primary slot. Other slots: (2,EA) FLdFPR8.
Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105666, dispatch slot 0x66106ED0, modOpcodes line 1098.
FLdFPR8
(2,0xEA)not emitteddup of (0,6F)handler #108Floating pointconfirmed_handlerFLdFPR8.Encoding, evidence and notes
Encoding: FC EA (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105666, shared by 2 dispatch slots (real opcode #108). This is a duplicate slot of (0,6F) FLdFPR8. Other slots: (0,6F) FLdFPR8.
Description: none. Handler 0x66105666, dispatch slot 0x661078BC, modOpcodes line 1114.
FLdI2
(0,0x6B)emittedprimary of 2handler #104Integerinferred_corpus383 corpus hitsFLdI2.Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: I2.
Emitted for every read of a typed local or argument outside of specialized paths.
Public Sub Main()
Dim a As Boolean, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: 6B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 6B 7AFF FLdI2 [var_86]
Form1.LoadPlugins @ 0x4644FC | 4645EF 6B A2FE FLdI2 [var_15E]
Form1.LoadPlugins @ 0x4644FC | 464630 6B 76FF FLdI2 [var_8A]
Form1.LoadPlugins @ 0x4644FC | 464646 6B 76FF FLdI2 [var_8A]
383 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6B_FLdI2.
Handler: 0x66105609, shared by 2 dispatch slots (real opcode #104). This is the primary slot. Other slots: (2,E1) FLdI2.
Corpus: 383 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105609, dispatch slot 0x66106EC0, modOpcodes line 1095.
FLdI2
(2,0xE1)not emitteddup of (0,6B)handler #104Integerconfirmed_handlerFLdI2.Encoding, evidence and notes
Encoding: FC E1 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105609, shared by 2 dispatch slots (real opcode #104). This is a duplicate slot of (0,6B) FLdI2. Other slots: (0,6B) FLdI2.
Description: none. Handler 0x66105609, dispatch slot 0x66107898, modOpcodes line 1105.
FLdLateIdUnkVar
(2,0x74)not emittedhandler #408Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FC 74 (lead byte FC selects table 2), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A802, unique to this slot (real opcode #408).
Description: none. Handler 0x6610A802, dispatch slot 0x661076E4, modOpcodes line 1155.
FLdPr
(0,0x08)emittedprimary of 2handler #7Object / COMinferred_corpus3260 corpus hitspr.Loads a 4-byte object reference from a frame slot and pushes the raw pointer onto the stack. The slot at [ebp+%a] typically holds an IDispatch* or IUnknown* previously stored by FStAd/FStAdFunc. No reference counting is performed by this opcode -- the pointer is loaded as-is and ref-count balance is the caller's responsibility (the compiler arranges matching FFree1Ad/AddRef opcodes around the use).
Stack: [...] -> [..., (*[ebp+%a]):Pr]
Used as the receiver for VCall*/LateMemCall*, and as the this argument to module helpers that take an object pointer. Distinct from FLdRfVar (Variant slot reference, not an object pointer) and FLdPrThis (no operand; pushes the implicit Me).
Emitted before member calls and field access on a local, temporary or ByVal-copied object variable (o.Method, o.Prop). Class members use FLdPrThis; ByRef object parameters use ILdPr.
Public Sub Main()
Dim o As Object, v As Variant
v = o.Prop
End Sub
Encoding, evidence and notes
Encoding: 08, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 08 78FF FLdPr var_88
Form1.LoadPlugins @ 0x4644FC | 464516 08 68FF FLdPr var_98
Form1.LoadPlugins @ 0x4644FC | 46455D 08 68FF FLdPr var_98
Form1.LoadPlugins @ 0x4644FC | 46456E 08 B0FE FLdPr var_150
3260 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_08_FLdPr.
Handler: 0x661062AA, shared by 2 dispatch slots (real opcode #7). This is the primary slot. Other slots: (2,EB) FLdPr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3260 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As Collection, n As Long
Set c = New Collection
n = c.CountDescription: draft, by claude-opus-5-5. Handler 0x661062AA, dispatch slot 0x66106D34, modOpcodes line 1090.
FLdPr
(2,0xEB)not emitteddup of (0,08)handler #7Object / COMconfirmed_handlerpr.Encoding, evidence and notes
Encoding: FC EB (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661062AA, shared by 2 dispatch slots (real opcode #7). This is a duplicate slot of (0,08) FLdPr. Other slots: (0,08) FLdPr.
Description: none. Handler 0x661062AA, dispatch slot 0x661078C0, modOpcodes line 1091.
FLdPrThis
(0,0x21)emittedprimary of 2handler #32Object / COMconfirmed_msdocs1256 corpus hitsMe for a call on the host object's built-in interface (form, UserControl, UserDocument).Pushes the current instance's interface pointer (Me, as the VB Form/UserControl interface) for the VCall that follows.
Stack: [...] -> [..., Me:Pr]
Emitted inside form, control and document modules for unqualified use of the host's built-in members and controls: TextHeight("a"), Caption, Text1.Text (the control is fetched from Me). Access to the module's own variables uses FLdPr this + Mem*, and calls to its own procedures use ThisVCallHresult, so this opcode is never emitted in class or standard modules.
Public Sub Main()
End Sub
' ---- Form1.frm
Public Sub Work()
Dim x As Single, n As Long, b As Boolean, i As Integer, c As Currency, s As String, y As Single, u As Integer, d As Single, v As Variant, o As Object, p As StdPicture
On Error Resume Next
s = Caption
End Sub
Encoding, evidence and notes
Encoding: 21, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 21 FLdPrThis
Form1.LoadPlugins @ 0x4644FC | 464556 21 FLdPrThis
Form1.RegisterPlugin @ 0x44CB20 | 44CB25 21 FLdPrThis
Form1.RegisterPlugin @ 0x44CB20 | 44CB43 21 FLdPrThis
1256 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_21_FLdPrThis.
Handler: 0x66105690, shared by 2 dispatch slots (real opcode #32). This is the primary slot. Other slots: (3,9E) FLdPrThis.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1256 occurrence(s) in PDFStreamDumper_p.exe.
Form1.Work
' ---- Form1.frm
Public Sub Work()
Dim h As Single
h = TextHeight("a")
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105690, dispatch slot 0x66106D98, modOpcodes line 1087.
FLdPrThis
(3,0x9E)not emitteddup of (0,21)handler #32Object / COMconfirmed_handlerFLdPrThis.Alias dispatch slot (3, 0x9E) for the canonical FLdPrThis at (0, 0x21); semantics are identical.
Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: ``.
Emitted for every read of a typed local or argument outside of specialized paths.
Encoding, evidence and notes
Encoding: FD 9E (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105690, shared by 2 dispatch slots (real opcode #32). This is a duplicate slot of (0,21) FLdPrThis. Other slots: (0,21) FLdPrThis.
Description: draft, by claude-opus-4.7. Handler 0x66105690, dispatch slot 0x66107B8C, modOpcodes line 1088.
FLdR4
(2,0xE2)not emitteddup of (0,6C)handler #105Integerinferred_corpus[ebp+%a]; push it as a typed reference.Encoding, evidence and notes
Encoding: FC E2 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E3) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.
(0,0x6C) ILdRf, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4
Description: none. Handler 0x66105620, dispatch slot 0x6610789C, modOpcodes line 1106.
FLdR4
(2,0xE3)not emitteddup of (0,6C)handler #105Integerconfirmed_handler[ebp+%a]; push it as a typed reference.Encoding, evidence and notes
Encoding: FC E3 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.
(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4
Description: none. Handler 0x66105620, dispatch slot 0x661078A0, modOpcodes line 1107.
FLdR4
(2,0xE7)not emitteddup of (0,6C)handler #105Integerconfirmed_handler[ebp+%a]; push it as a typed reference.Encoding, evidence and notes
Encoding: FC E7 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E3) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.
(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4
Description: none. Handler 0x66105620, dispatch slot 0x661078B0, modOpcodes line 1109.
FLdR4
(2,0xE8)not emitteddup of (0,6C)handler #105Integerconfirmed_handler[ebp+%a]; push it as a typed reference.Encoding, evidence and notes
Encoding: FC E8 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E3) FLdR4, (2,E7) FLdR4, (3,1C) FLdR4.
(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (3,0x1C) FLdR4
Description: none. Handler 0x66105620, dispatch slot 0x661078B4, modOpcodes line 1110.
FLdR4
(3,0x1C)not emitteddup of (0,6C)handler #105Integerconfirmed_handler[ebp+%a]; push it as a typed reference.Encoding, evidence and notes
Encoding: FD 1C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is a duplicate slot of (0,6C) ILdRf. Other slots: (0,6C) ILdRf, (2,E2) FLdR4, (2,E3) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4.
(0,0x6C) ILdRf, (2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4
Description: none. Handler 0x66105620, dispatch slot 0x66107984, modOpcodes line 1108.
FLdR8
(0,0x6D)emittedprimary of 3handler #106Currencyinferred_corpusReads a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and pushes it from a frame slot (local variable, temporary or ByVal argument).
Stack: [...] -> [..., v:R8]
Operands: %a: signed 16-bit frame offset.
Locals, compiler temporaries and ByVal arguments.
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for reads of a frame slot (local variable, temporary or ByVal argument) when the value is a 8-byte value. The storage class selects the prefix (F); the value class selects the suffix (R8).
Public Sub Main()
Dim c As Currency, v As Variant
v = c
End Sub
Encoding, evidence and notes
Encoding: 6D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 6D 74FF FLdR8 var_8C
6D 74FF FLdR8 var_8C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6D_FLdR8.
Handler: 0x66109DB0, shared by 3 dispatch slots (real opcode #106). This is the primary slot. Other slots: (2,E4) FLdR8, (2,E5) FLdR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Currency, v As Variant
v = c
End Sub(2,0xE4) FLdR8, (2,0xE5) FLdR8
Description: draft, by claude-opus-5-5. Handler 0x66109DB0, dispatch slot 0x66106EC8, modOpcodes line 1096.
FLdR8
(2,0xE4)not emitteddup of (0,6D)handler #106Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FC E4 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109DB0, shared by 3 dispatch slots (real opcode #106). This is a duplicate slot of (0,6D) FLdR8. Other slots: (0,6D) FLdR8, (2,E5) FLdR8.
(0,0x6D) FLdR8, (2,0xE5) FLdR8
Description: none. Handler 0x66109DB0, dispatch slot 0x661078A4, modOpcodes line 1111.
FLdR8
(2,0xE5)not emitteddup of (0,6D)handler #106Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FC E5 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109DB0, shared by 3 dispatch slots (real opcode #106). This is a duplicate slot of (0,6D) FLdR8. Other slots: (0,6D) FLdR8, (2,E4) FLdR8.
(0,0x6D) FLdR8, (2,0xE4) FLdR8
Description: none. Handler 0x66109DB0, dispatch slot 0x661078A8, modOpcodes line 1112.
FLdRfVar
(0,0x04)emittedprimary of 3handler #3Stack & frameinferred_corpus6566 corpus hits[ebp+%a].Loads a pointer to a Variant-typed frame slot onto the stack. The slot lives at [ebp+%a] where %a is a 2-byte signed offset (rendered as var_xx by vbdec). Unlike FLdVar, which copies the Variant value onto the stack, FLdRfVar pushes the slot address itself -- the receiver writes through it.
Stack: [...] -> [..., &([ebp+%a]):RfVar]
By a wide margin the most-emitted opcode in typical VB6 P-code (6566 occurrences in PDFStreamDumper), because every Variant argument passed to a runtime helper or user procedure travels as a ByRef slot reference rather than as a value copy. Sibling FLdRf plays the same role for typed (non-Variant) slots; FLdVar is selected only when a value copy is required (ByVal Variant arg, expression temp).
Emitted on every read of a Variant local or argument whose value is going to be passed to or modified through a ByRef sink -- which in practice is most of them. FLdVar is selected only where a value copy is genuinely required.
Private Declare Sub Ext Lib "x.dll" (b As Object)
Public Sub Main()
Dim b As Object
Ext b
End Sub
Encoding, evidence and notes
Encoding: 04, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 04 78FF FLdRfVar var_88
Form1.LoadPlugins @ 0x4644FC | 464505 04 64FF FLdRfVar var_9C
Form1.LoadPlugins @ 0x4644FC | 464508 04 68FF FLdRfVar var_98
Form1.LoadPlugins @ 0x4644FC | 46453C 04 ACFE FLdRfVar var_154
6566 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_04_FLdRfVar.
Handler: 0x6610567B, shared by 3 dispatch slots (real opcode #3). This is the primary slot. Other slots: (2,E6) FLdRfVar, (2,EC) FLdRfVar.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 6566 occurrence(s) in PDFStreamDumper_p.exe.
Sub Helper(ByRef v As Variant)
v = 42
End Sub
Dim x As Variant
Helper x ' x's slot pushed via FLdRfVar(2,0xE6) FLdRfVar, (2,0xEC) FLdRfVar
Description: draft, by claude-opus-4.7. Handler 0x6610567B, dispatch slot 0x66106D24, modOpcodes line 1115.
FLdRfVar
(2,0xE6)not emitteddup of (0,04)handler #3Stack & frameconfirmed_handler[ebp+%a].Encoding, evidence and notes
Encoding: FC E6 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610567B, shared by 3 dispatch slots (real opcode #3). This is a duplicate slot of (0,04) FLdRfVar. Other slots: (0,04) FLdRfVar, (2,EC) FLdRfVar.
(0,0x04) FLdRfVar, (2,0xEC) FLdRfVar
Description: none. Handler 0x6610567B, dispatch slot 0x661078AC, modOpcodes line 1117.
FLdRfVar
(2,0xEC)not emitteddup of (0,04)handler #3Stack & frameconfirmed_handler[ebp+%a].Encoding, evidence and notes
Encoding: FC EC (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610567B, shared by 3 dispatch slots (real opcode #3). This is a duplicate slot of (0,04) FLdRfVar. Other slots: (0,04) FLdRfVar, (2,E6) FLdRfVar.
(0,0x04) FLdRfVar, (2,0xE6) FLdRfVar
Description: none. Handler 0x6610567B, dispatch slot 0x661078C4, modOpcodes line 1116.
FLdUI1
(2,0xE0)emittedhandler #462Integerinferred_corpus12 corpus hitsFLdUI1.Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: UI1.
Emitted for every read of a typed local or argument outside of specialized paths.
Public Sub Main()
Dim a As Byte, c As Byte
c = CByte(a)
End Sub
Encoding, evidence and notes
Encoding: FC E0 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCE0 7AFF FLdUI1 var_86
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658D6 FCE0 66FF FLdUI1 var_9A
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658E4 FCE0 64FF FLdUI1 var_9C
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4658FF FCE0 62FF FLdUI1 var_9E
12 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_E0_FLdUI1.
Handler: 0x66109D77, unique to this slot (real opcode #462).
Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109D77, dispatch slot 0x66107894, modOpcodes line 1104.
FLdVar
(2,0xED)emittedhandler #463Variantinferred_corpus29 corpus hitsFLdVar.Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: Var.
Emitted for every read of a typed local or argument outside of specialized paths.
Private Declare Sub Ext Lib "x.dll" (b As Variant)
Private Declare Sub ExtV Lib "x.dll" Alias "Ext" (ByVal b As Variant)
Public Sub Main()
Dim b As Variant
ExtV b
End Sub
Encoding, evidence and notes
Encoding: FC ED (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCED 6CFF FLdVar var_94
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4741BC FCED 48FF FLdVar var_B8
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 47448F FCED 48FF FLdVar var_B8
Form1.mnuUnescape_Click @ 0x45DEC4 | 45E017 FCED 2CFF FLdVar var_D4
29 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_ED_FLdVar.
Handler: 0x6610624F, unique to this slot (real opcode #463).
Corpus: 29 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610624F, dispatch slot 0x661078C8, modOpcodes line 1118.
FLdZeroAd
(0,0x3E)emittedprimary of 4handler #61Object / COMinferred_corpus284 corpus hitsFLdZeroAd.Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: Ad.
Emitted for every read of a typed local or argument outside of specialized paths.
Public Sub Main()
Dim v As Variant, s As String
v = LoadResString(1)
End Sub
Encoding, evidence and notes
Encoding: 3E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 3E 64FF FLdZeroAd var_9C
Form1.mn_b64EncClip_Click @ 0x447B64 | 447B8A 3E 60FF FLdZeroAd var_A0
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3A2 3E 50FF FLdZeroAd var_B0
Form1.mnub64decode_Click @ 0x451280 | 4512B7 3E 60FF FLdZeroAd var_A0
284 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3E_FLdZeroAd.
Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is the primary slot. Other slots: (0,51) FLdZeroAd, (3,3F) FLdZeroAd, (3,62) FLdZeroAd.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,3E):
Dim v As Variant, s As String : v = LoadResString(1) - (0,51):
Dim o As Object : Set o = Printer
Corpus: 284 occurrence(s) in PDFStreamDumper_p.exe.
(0,0x51) FLdZeroAd, (3,0x3F) FLdZeroAd, (3,0x62) FLdZeroAd
Description: draft, by claude-opus-4.7. Handler 0x66105635, dispatch slot 0x66106E0C, modOpcodes line 1138.
FLdZeroAd
(0,0x51)emitteddup of (0,3E)handler #61Object / COMconfirmed_handler50 corpus hitsFLdZeroAd.Alias dispatch slot (0, 0x51) for the canonical FLdZeroAd at (0, 0x3E); semantics are identical.
Loads a local variable or argument from the current stack frame [ebp+%a] onto the stack. Suffix encodes the result form: Ad.
Emitted for every read of a typed local or argument outside of specialized paths.
Public Sub Main()
Dim o As Object
Set o = Printer
End Sub
Encoding, evidence and notes
Encoding: 51, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 51 74FF FLdZeroAd var_8C
Form1.RegisterPlugin @ 0x44CB20 | 44CB52 51 5CFF FLdZeroAd var_A4
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B13E 51 04FF FLdZeroAd var_FC
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B23F 51 04FF FLdZeroAd var_FC
50 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_51_FLdZeroAd.
Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is a duplicate slot of (0,3E) FLdZeroAd. Other slots: (0,3E) FLdZeroAd, (3,3F) FLdZeroAd, (3,62) FLdZeroAd.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,3E):
Dim v As Variant, s As String : v = LoadResString(1) - (0,51):
Dim o As Object : Set o = Printer
Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.
(0,0x3E) FLdZeroAd, (3,0x3F) FLdZeroAd, (3,0x62) FLdZeroAd
Description: draft, by claude-opus-4.7. Handler 0x66105635, dispatch slot 0x66106E58, modOpcodes line 1139.
FLdZeroAd
(3,0x3F)not emitteddup of (0,3E)handler #61Object / COMconfirmed_handlerFLdZeroAd.Encoding, evidence and notes
Encoding: FD 3F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is a duplicate slot of (0,3E) FLdZeroAd. Other slots: (0,3E) FLdZeroAd, (0,51) FLdZeroAd, (3,62) FLdZeroAd.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,3E):
Dim v As Variant, s As String : v = LoadResString(1) - (0,51):
Dim o As Object : Set o = Printer
(0,0x3E) FLdZeroAd, (0,0x51) FLdZeroAd, (3,0x62) FLdZeroAd
Description: none. Handler 0x66105635, dispatch slot 0x66107A10, modOpcodes line 1140.
FLdZeroAd
(3,0x62)not emitteddup of (0,3E)handler #61Object / COMconfirmed_handlerFLdZeroAd.Encoding, evidence and notes
Encoding: FD 62 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105635, shared by 4 dispatch slots (real opcode #61). This is a duplicate slot of (0,3E) FLdZeroAd. Other slots: (0,3E) FLdZeroAd, (0,51) FLdZeroAd, (3,3F) FLdZeroAd.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,3E):
Dim v As Variant, s As String : v = LoadResString(1) - (0,51):
Dim o As Object : Set o = Printer
(0,0x3E) FLdZeroAd, (0,0x51) FLdZeroAd, (3,0x3F) FLdZeroAd
Description: none. Handler 0x66105635, dispatch slot 0x66107A9C, modOpcodes line 1141.
FLdZeroAry
(5,0x38)not emittedhandler #765Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FF 38 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109D8E, unique to this slot (real opcode #765).
Description: none. Handler 0x66109D8E, dispatch slot 0x661081F4, modOpcodes line 1154.
F_Store
Frame-relative store (variable at [ebp+%a]) Prefix: F = frame
FStAd
(2,0xF8)emittedhandler #466Object / COMinferred_corpus50 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:Ad] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdAd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type Ad.
Dim g As Object
Public Sub Main()
Dim b As Object
Set b = g
End Sub
Encoding, evidence and notes
Encoding: FC F8 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCF8 78FF FStAd var_88
Form1.mnuFindReplace_Click @ 0x446984 | 446A16 FCF8 78FF FStAd var_88
Form1.mnuWipeStream_Click @ 0x46D520 | 46D64F FCF8 CCFE FStAd var_134
Form1.cmdDecode_Click @ 0x4775C0 | 477CFA FCF8 D4FE FStAd var_12C
50 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_F8_FStAd.
Handler: 0x6610640A, unique to this slot (real opcode #466).
Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610640A, dispatch slot 0x661078F4, modOpcodes line 1128.
FStAdFunc
(0,0x19)emittedprimary of 2handler #24Object / COMinferred_corpus1680 corpus hitsNew or a call into an object variable, without an extra AddRef.Pops an object pointer that the producer already owns (from New or a function return), releases the object previously held in frame slot %a and stores the new pointer without AddRef.
Stack: [..., o:Ad] -> [...]
Emitted for Set o = New Class and Set o = F() into a local or argument object variable. The reference is a fresh one, so it is adopted as-is. Set o = p (copying an existing reference) uses FStAd (2,F8), which AddRefs.
Public Sub Main()
Dim a As Object, b As Object
Set a = New Collection
End Sub
Encoding, evidence and notes
Encoding: 19, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 19 78FF FStAdFunc var_88
Form1.LoadPlugins @ 0x4644FC | 46455A 19 68FF FStAdFunc var_98
Form1.LoadPlugins @ 0x4644FC | 46456B 19 B0FE FStAdFunc var_150
Form1.LoadPlugins @ 0x4644FC | 46469E 19 68FF FStAdFunc var_98
1680 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_19_FStAdFunc.
Handler: 0x661063E4, shared by 2 dispatch slots (real opcode #24). This is the primary slot. Other slots: (2,FF) FStAdFunc.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1680 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As Collection
Set c = New CollectionDescription: draft, by claude-opus-5-5. Handler 0x661063E4, dispatch slot 0x66106D78, modOpcodes line 1135.
FStAdFunc
(2,0xFF)not emitteddup of (0,19)handler #24Object / COMconfirmed_handlerNew or a call into an object variable, without an extra AddRef.Encoding, evidence and notes
Encoding: FC FF (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661063E4, shared by 2 dispatch slots (real opcode #24). This is a duplicate slot of (0,19) FStAdFunc. Other slots: (0,19) FStAdFunc.
Description: none. Handler 0x661063E4, dispatch slot 0x66107910, modOpcodes line 1136.
FStAdFuncNoPop
(0,0x5B)emittedprimary of 2handler #89Object / COMinferred_corpus153 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Private Type TRec
pad As Long
f As Object
End Type
Dim gr As TRec
Public Sub Main()
Dim b As Object
Set gr.f = New Collection
End Sub
Encoding, evidence and notes
Encoding: 5B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 5B 74FF FStAdFuncNoPop var_8C
Form1.RegisterPlugin @ 0x44CB20 | 44CB55 5B 58FF FStAdFuncNoPop var_A8
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1C5 5B 78FF FStAdFuncNoPop var_88
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FB9 5B 5CFF FStAdFuncNoPop var_A4
153 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5B_FStAdFuncNoPop.
Handler: 0x661063E0, shared by 2 dispatch slots (real opcode #89). This is the primary slot. Other slots: (3,9D) FStAdFuncNoPop.
Corpus: 153 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661063E0, dispatch slot 0x66106E80, modOpcodes line 1152.
FStAdFuncNoPop
(3,0x9D)not emitteddup of (0,5B)handler #89Object / COMconfirmed_handler; store into frame slot [ebp+%a]`.Encoding, evidence and notes
Encoding: FD 9D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661063E0, shared by 2 dispatch slots (real opcode #89). This is a duplicate slot of (0,5B) FStAdFuncNoPop. Other slots: (0,5B) FStAdFuncNoPop.
Description: none. Handler 0x661063E0, dispatch slot 0x66107B88, modOpcodes line 1153.
FStAdNoPop
(3,0x9C)emittedhandler #551Object / COMinferred_corpus16 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Public Sub Main()
Dim a As Object, b As Object
P a
End Sub
Sub P(ByVal o As Object)
End Sub
Encoding, evidence and notes
Encoding: FD 9C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD9C 70FF FStAdNoPop var_90
Form1.Shutdown @ 0x442740 | 44276F FD9C 58FF FStAdNoPop var_A8
Form1.mnuGotoObject_Click @ 0x44D160 | 44D221 FD9C 70FE FStAdNoPop var_190
Form1.mnuWipeStream_Click @ 0x46D520 | 46D610 FD9C 78FF FStAdNoPop var_88
16 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_9C_FStAdNoPop.
Handler: 0x66106406, unique to this slot (real opcode #551).
Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106406, dispatch slot 0x66107B84, modOpcodes line 1149.
FStFPR4
(0,0x73)emittedprimary of 2handler #112Floating pointinferred_corpus2 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:FPR4] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdFPR4. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type FPR4.
Public Sub Main()
Dim a As Single, c As Single
c = CSng(a)
End Sub
Encoding, evidence and notes
Encoding: 73, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 73 74FF FStFPR4 var_8C
fso.Proc_44D3E8 @ 0x44D3E8 | 44D41D 73 D8FE FStFPR4 var_128
fso.Proc_44D3E8 @ 0x44D3E8 | 44D430 73 D4FE FStFPR4 var_12C
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_73_FStFPR4.
Handler: 0x661056CE, shared by 2 dispatch slots (real opcode #112). This is the primary slot. Other slots: (2,F9) FStFPR4.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661056CE, dispatch slot 0x66106EE0, modOpcodes line 1102.
FStFPR4
(2,0xF9)not emitteddup of (0,73)handler #112Floating pointconfirmed_handler[ebp+%a].Encoding, evidence and notes
Encoding: FC F9 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661056CE, shared by 2 dispatch slots (real opcode #112). This is a duplicate slot of (0,73) FStFPR4. Other slots: (0,73) FStFPR4.
Description: none. Handler 0x661056CE, dispatch slot 0x661078F8, modOpcodes line 1129.
FStFPR8
(0,0x74)emittedprimary of 2handler #113Floating pointinferred_corpus38 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:FPR8] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdFPR8. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type FPR8.
Public Sub Main()
Dim a As Date, c As Date
c = CDate(a)
End Sub
Encoding, evidence and notes
Encoding: 74, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 74 6CFF FStFPR8 var_94
Form1.LoadPlugins @ 0x4644FC | 464734 74 84FE FStFPR8 var_17C
Form1.mnuBrowseHomeDir_Click @ 0x441CB0 | 441CED 74 58FF FStFPR8 var_A8
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46148D 74 E0FE FStFPR8 var_120
38 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_74_FStFPR8.
Handler: 0x661056ED, shared by 2 dispatch slots (real opcode #113). This is the primary slot. Other slots: (2,FA) FStFPR8.
Corpus: 38 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661056ED, dispatch slot 0x66106EE4, modOpcodes line 1103.
FStFPR8
(2,0xFA)not emitteddup of (0,74)handler #113Floating pointconfirmed_handler[ebp+%a].Encoding, evidence and notes
Encoding: FC FA (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661056ED, shared by 2 dispatch slots (real opcode #113). This is a duplicate slot of (0,74) FStFPR8. Other slots: (0,74) FStFPR8.
Description: none. Handler 0x661056ED, dispatch slot 0x661078FC, modOpcodes line 1130.
FStI2
(0,0x70)emittedprimary of 2handler #109Integerinferred_corpus157 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:I2] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdI2. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type I2.
Public Sub Main()
Dim a As Boolean, c As Boolean
c = CBool(a)
End Sub
Encoding, evidence and notes
Encoding: 70, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 70 78FF FStI2 [var_88]
Form1.RegisterPlugin @ 0x44CB20 | 44CB37 70 6AFF FStI2 [var_96]
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D56B 70 7AFF FStI2 [var_86]
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D61F 70 7AFF FStI2 [var_86]
157 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_70_FStI2.
Handler: 0x661056A2, shared by 2 dispatch slots (real opcode #109). This is the primary slot. Other slots: (2,F1) FStI2.
Corpus: 157 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661056A2, dispatch slot 0x66106ED4, modOpcodes line 1099.
FStI2
(2,0xF1)not emitteddup of (0,70)handler #109Integerconfirmed_handler[ebp+%a].Encoding, evidence and notes
Encoding: FC F1 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661056A2, shared by 2 dispatch slots (real opcode #109). This is a duplicate slot of (0,70) FStI2. Other slots: (0,70) FStI2.
Description: none. Handler 0x661056A2, dispatch slot 0x661078D8, modOpcodes line 1120.
FStR4
(0,0x71)emittedprimary of 3handler #110Integerinferred_corpus371 corpus hitsPops a raw 32-bit value and writes it to [ebp+%a].
Stack: [..., v:I4] -> [...]
Emitted for writes to 4-byte non-floating locals and ByVal arguments: Long, and 32-bit values in general. Single values use FStFPR4 (0,73), Integer/Boolean FStI2 (0,70), String FStStr. The MSVBVM60 label for this handler is _lblEX_FStI4.
Option Base 1
Public Sub Main()
Dim a(5) As Long, n As Long
n = a(1)
End Sub
Encoding, evidence and notes
Encoding: 71, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 71 5CFF FStR4 [var_A4]
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4615C3 71 C4FE FStR4 [var_13C]
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA50 71 74FF FStR4 [var_8C]
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBC5 71 74FF FStR4 [var_8C]
371 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_71_FStR4.
Handler: 0x661056B9, shared by 3 dispatch slots (real opcode #110). This is the primary slot. Other slots: (2,F2) FStR4, (2,F3) FStR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 371 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
n = 70000(2,0xF2) FStR4, (2,0xF3) FStR4
Description: draft, by claude-opus-5-5. Handler 0x661056B9, dispatch slot 0x66106ED8, modOpcodes line 1100.
FStR4
(2,0xF2)not emitteddup of (0,71)handler #110Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FC F2 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661056B9, shared by 3 dispatch slots (real opcode #110). This is a duplicate slot of (0,71) FStR4. Other slots: (0,71) FStR4, (2,F3) FStR4.
(0,0x71) FStR4, (2,0xF3) FStR4
Description: none. Handler 0x661056B9, dispatch slot 0x661078DC, modOpcodes line 1121.
FStR4
(2,0xF3)not emitteddup of (0,71)handler #110Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FC F3 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661056B9, shared by 3 dispatch slots (real opcode #110). This is a duplicate slot of (0,71) FStR4. Other slots: (0,71) FStR4, (2,F2) FStR4.
(0,0x71) FStR4, (2,0xF2) FStR4
Description: none. Handler 0x661056B9, dispatch slot 0x661078E0, modOpcodes line 1122.
FStR8
(0,0x72)emittedprimary of 3handler #111Currencyinferred_corpusPops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to a frame slot (local variable, temporary or ByVal argument).
Stack: [..., v:R8] -> [...]
Operands: %a: signed 16-bit frame offset.
Locals, compiler temporaries and ByVal arguments.
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a 8-byte value. The storage class selects the prefix (F); the value class selects the suffix (R8).
Public Sub Main()
Dim a As Currency, c As Currency
c = CCur(a)
End Sub
Encoding, evidence and notes
Encoding: 72, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 72 6CFF FStR8 [var_94]
72 6CFF FStR8 [var_94]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_72_FStR8.
Handler: 0x66109DDF, shared by 3 dispatch slots (real opcode #111). This is the primary slot. Other slots: (2,F4) FStR8, (2,F5) FStR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Currency, c As Currency
c = CCur(a)
End Sub(2,0xF4) FStR8, (2,0xF5) FStR8
Description: draft, by claude-opus-5-5. Handler 0x66109DDF, dispatch slot 0x66106EDC, modOpcodes line 1101.
FStR8
(2,0xF4)not emitteddup of (0,72)handler #111Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FC F4 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109DDF, shared by 3 dispatch slots (real opcode #111). This is a duplicate slot of (0,72) FStR8. Other slots: (0,72) FStR8, (2,F5) FStR8.
(0,0x72) FStR8, (2,0xF5) FStR8
Description: none. Handler 0x66109DDF, dispatch slot 0x661078E4, modOpcodes line 1123.
FStR8
(2,0xF5)not emitteddup of (0,72)handler #111Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FC F5 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109DDF, shared by 3 dispatch slots (real opcode #111). This is a duplicate slot of (0,72) FStR8. Other slots: (0,72) FStR8, (2,F4) FStR8.
(0,0x72) FStR8, (2,0xF4) FStR8
Description: none. Handler 0x66109DDF, dispatch slot 0x661078E8, modOpcodes line 1124.
FStStr
(0,0x31)emittedprimary of 2handler #48Stringinferred_corpus448 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:Str] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdStr. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type Str.
Public Sub Main()
Dim a As Boolean, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: 31, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 31 74FF FStStr var_8C
Form1.LoadPlugins @ 0x4644FC | 46465B 31 64FF FStStr var_9C
Form1.LoadPlugins @ 0x4644FC | 464668 31 70FF FStStr var_90
Form1.mn_b64EncClip_Click @ 0x447B64 | 447B8D 31 78FF FStStr var_88
448 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_31_FStStr.
Handler: 0x66106305, shared by 2 dispatch slots (real opcode #48). This is the primary slot. Other slots: (2,F7) FStStr.
Corpus: 448 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106305, dispatch slot 0x66106DD8, modOpcodes line 1126.
FStStr
(2,0xF7)not emitteddup of (0,31)handler #48Stringconfirmed_handler[ebp+%a].Encoding, evidence and notes
Encoding: FC F7 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106305, shared by 2 dispatch slots (real opcode #48). This is a duplicate slot of (0,31) FStStr. Other slots: (0,31) FStStr.
Description: none. Handler 0x66106305, dispatch slot 0x661078F0, modOpcodes line 1127.
FStStrCopy
(0,0x43)emittedprimary of 2handler #66Stringinferred_corpus176 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Public Sub Main()
Dim a As String, c As String
c = CStr(a)
End Sub
Encoding, evidence and notes
Encoding: 43, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 43 74FF FStStrCopy var_8C
Form1.mnub64decode_Click @ 0x451280 | 451290 43 68FF FStStrCopy var_98
Form1.mnub64decode_Click @ 0x451280 | 45129B 43 6CFF FStStrCopy var_94
Form1.mnub64Encode_Click @ 0x4510EC | 4510FC 43 68FF FStStrCopy var_98
176 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_43_FStStrCopy.
Handler: 0x66106323, shared by 2 dispatch slots (real opcode #66). This is the primary slot. Other slots: (3,01) FStStrCopy.
Corpus: 176 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106323, dispatch slot 0x66106E20, modOpcodes line 1147.
FStStrCopy
(3,0x01)not emitteddup of (0,43)handler #66Stringconfirmed_handler; store into frame slot [ebp+%a]`.Encoding, evidence and notes
Encoding: FD 01 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106323, shared by 2 dispatch slots (real opcode #66). This is a duplicate slot of (0,43) FStStrCopy. Other slots: (0,43) FStStrCopy.
Description: none. Handler 0x66106323, dispatch slot 0x66107918, modOpcodes line 1148.
FStStrNoPop
(0,0x23)emittedprimary of 2handler #34Stringinferred_corpus782 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Public Sub Main()
Dim a As Boolean, c As Variant
c = Asc(a)
End Sub
Encoding, evidence and notes
Encoding: 23, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 23 64FF FStStrNoPop var_9C
Form1.LoadPlugins @ 0x4644FC | 464712 23 94FE FStStrNoPop var_16C
Form1.LoadPlugins @ 0x4644FC | 464719 23 90FE FStStrNoPop var_170
Form1.LoadPlugins @ 0x4644FC | 464725 23 8CFE FStStrNoPop var_174
782 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_23_FStStrNoPop.
Handler: 0x66106301, shared by 2 dispatch slots (real opcode #34). This is the primary slot. Other slots: (3,64) FStStrNoPop.
Corpus: 782 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106301, dispatch slot 0x66106DA0, modOpcodes line 1144.
FStStrNoPop
(3,0x64)not emitteddup of (0,23)handler #34Stringconfirmed_handler; store into frame slot [ebp+%a]`.Encoding, evidence and notes
Encoding: FD 64 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106301, shared by 2 dispatch slots (real opcode #34). This is a duplicate slot of (0,23) FStStrNoPop. Other slots: (0,23) FStStrNoPop.
Description: none. Handler 0x66106301, dispatch slot 0x66107AA4, modOpcodes line 1146.
FStUI1
(2,0xF0)emittedhandler #464Integerinferred_corpus8 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:UI1] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdUI1. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type UI1.
Public Sub Main()
Dim a As Boolean, c As Byte
c = a
End Sub
Encoding, evidence and notes
Encoding: FC F0 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCF0 78FF FStUI1 var_88
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465769 FCF0 66FF FStUI1 var_9A
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465779 FCF0 64FF FStUI1 var_9C
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 465789 FCF0 62FF FStUI1 var_9E
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_F0_FStUI1.
Handler: 0x66109DC9, unique to this slot (real opcode #464).
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109DC9, dispatch slot 0x661078D4, modOpcodes line 1119.
FStVar
(2,0xF6)emittedhandler #465Variantinferred_corpus564 corpus hits[ebp+%a].Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:Var] -> [...] (slot [ebp+%a] <- a)
Mirror of FLdVar. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type Var.
Public Sub Main()
Dim c As Variant
c = 0
End Sub
Encoding, evidence and notes
Encoding: FC F6 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCF6 6CFF FStVar var_94
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A2EF FCF6 6CFF FStVar var_94
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A3EB FCF6 6CFF FStVar var_94
Form1.AppPath @ 0x4405D8 | 4405F9 FCF6 6CFF FStVar var_94
564 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_F6_FStVar.
Handler: 0x661064FD, unique to this slot (real opcode #465).
Corpus: 564 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661064FD, dispatch slot 0x661078EC, modOpcodes line 1125.
FStVarAd
(2,0xFB)emittedhandler #467Variantinferred_corpusPops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a frame slot (local variable, temporary or ByVal argument).
Stack: [..., v:Var] -> [...]
Operands: %a: signed 16-bit frame offset.
Locals, compiler temporaries and ByVal arguments.
Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a object into a Variant. The storage class selects the prefix (F); the value class selects the suffix (VarAd).
Public Sub Main()
Dim c As Variant
Set c = Nothing
End Sub
Encoding, evidence and notes
Encoding: FC FB (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCFB 6CFF FStVarAd var_94
FCFB 6CFF FStVarAd var_94
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FB_FStVarAd.
Handler: 0x6610B3F5, unique to this slot (real opcode #467).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant
Set c = Nothing
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B3F5, dispatch slot 0x66107900, modOpcodes line 1131.
FStVarAdFunc
(2,0xFC)emittedhandler #468Variantinferred_corpus1 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Public Sub Main()
Dim v As Variant
Set v = New Collection
End Sub
Encoding, evidence and notes
Encoding: FC FC (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCFC 6CFF FStVarAdFunc var_94
Form2.mnuReplaceHexAscii_Click @ 0x46572C | 4657F3 FCFC 2CFF FStVarAdFunc var_D4
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FC_FStVarAdFunc.
Handler: 0x66106421, unique to this slot (real opcode #468).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106421, dispatch slot 0x66107904, modOpcodes line 1132.
FStVarCopy
(3,0x00)emittedhandler #471Variantinferred_corpus30 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Public Sub Main()
Dim c As Variant
c = "s"
End Sub
Encoding, evidence and notes
Encoding: FD 00 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD00 6CFF FStVarCopy var_94
Form1.GetExploits @ 0x43E384 | 43E391 FD00 6CFF FStVarCopy var_94
fso.Proc_45D698 @ 0x45D698 | 45D72C FD00 68FF FStVarCopy var_98
fso.Proc_449A54 @ 0x449A54 | 449A59 FD00 68FF FStVarCopy var_98
30 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_00_FStVarCopy.
Handler: 0x661064A3, unique to this slot (real opcode #471).
Corpus: 30 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661064A3, dispatch slot 0x66107914, modOpcodes line 1137.
FStVarCopyObj
(0,0x4E)emittedprimary of 2handler #77Variantinferred_corpus440 corpus hits; store into frame slot [ebp+%a]`.Pops the top-of-stack value of the suffix-indicated type and writes it to a frame-relative slot identified by the %a operand (local variable or argument).
Stack: [..., a:] -> [...] (slot [ebp+%a] <- a)
Mirror of FLd. Variants with Copy, NoPop, or Func suffixes modify the lifetime/refcount handling (a String Copy variant SysAlloc-duplicates the BSTR; NoPop leaves the value on the stack as well as storing it; Func flags the slot as the procedure's return value).
Emitted for every write of a typed local or argument of type .
Public Sub Main()
TakeVar "abc"
End Sub
Sub TakeVar(v As Variant)
End Sub
Encoding, evidence and notes
Encoding: 4E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 4E 5CFF FStVarCopyObj var_A4
Form1.LoadPlugins @ 0x4644FC | 464550 4E 34FF FStVarCopyObj var_CC
Form1.LoadPlugins @ 0x4644FC | 4645B3 4E 34FF FStVarCopyObj var_CC
Form1.mn_b64EncClip_Click @ 0x447B64 | 447BF2 4E 50FF FStVarCopyObj var_B0
440 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4E_FStVarCopyObj.
Handler: 0x661064D0, shared by 2 dispatch slots (real opcode #77). This is the primary slot. Other slots: (4,F8) FStVarCopyObj.
Corpus: 440 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661064D0, dispatch slot 0x66106E4C, modOpcodes line 1150.
FStVarCopyObj
(4,0xF8)not emitteddup of (0,4E)handler #77Variantconfirmed_handler; store into frame slot [ebp+%a]`.Encoding, evidence and notes
Encoding: FE F8 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661064D0, shared by 2 dispatch slots (real opcode #77). This is a duplicate slot of (0,4E) FStVarCopyObj. Other slots: (0,4E) FStVarCopyObj.
Description: none. Handler 0x661064D0, dispatch slot 0x661080F4, modOpcodes line 1151.
FStVarNoPop
(3,0x63)not emittedhandler #529Variantinferred_corpusEncoding, evidence and notes
Encoding: FD 63 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B6F4, unique to this slot (real opcode #529).
Description: none. Handler 0x6610B6F4, dispatch slot 0x66107AA0, modOpcodes line 1145.
FStVarUnk
(2,0xFD)emittedhandler #469Variantinferred_corpusPops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a frame slot (local variable, temporary or ByVal argument).
Stack: [..., v:Var] -> [...]
Operands: %a: signed 16-bit frame offset.
Locals, compiler temporaries and ByVal arguments.
Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a IUnknown into a Variant. The storage class selects the prefix (F); the value class selects the suffix (VarUnk).
Public Sub Main()
Dim u As IUnknown, v As Variant
Set v = u
End Sub
Encoding, evidence and notes
Encoding: FC FD (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCFD 68FF FStVarUnk var_98
FCFD 68FF FStVarUnk var_98
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FD_FStVarUnk.
Handler: 0x6610B50B, unique to this slot (real opcode #469).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim u As IUnknown, v As Variant
Set v = u
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B50B, dispatch slot 0x66107908, modOpcodes line 1133.
FStVarUnkFunc
(2,0xFE)emittedhandler #470Variantinferred_corpusPops an IUnknown pointer returned by a call, stored into a Variant as VT_UNKNOWN without an extra AddRef, and writes it to a frame slot (local variable, temporary or ByVal argument).
Stack: [..., v:Var] -> [...]
Operands: %a: signed 16-bit frame offset.
Locals, compiler temporaries and ByVal arguments.
Emitted for assignments to a frame slot (local variable, temporary or ByVal argument) when the value is a IUnknown from a call into a Variant. The storage class selects the prefix (F); the value class selects the suffix (VarUnkFunc).
Public Sub Main()
Dim v As Variant, u As IUnknown
Set v = FU()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding: FC FE (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FCFE 6CFF FStVarUnkFunc var_94
FCFE 6CFF FStVarUnkFunc var_94
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_FE_FStVarUnkFunc.
Handler: 0x6610B4F5, unique to this slot (real opcode #470).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, u As IUnknown
Set v = FU()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B4F5, dispatch slot 0x6610790C, modOpcodes line 1134.
FStVarZero
(4,0xF7)emittedprimary of 2handler #719Variantconfirmed_handlerMoves a Variant into the slot %a and clears the source, so the temporary is not freed twice.
Observed when the enumerable of a For Each comes from a function call (For Each x In F()). The compiler emits (4,F7); (5,39) is the other slot with this name.
Public Sub Main()
Dim c As New Collection, x As Variant
For Each x In F()
Next
For Each x In G()
Next
End Sub
Function F() As Variant
End Function
Function G() As Collection
End Function
Encoding, evidence and notes
Encoding: FE F7 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FEF7 48FF FStVarZero var_B8
FEF7 48FF FStVarZero var_B8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F7_FStVarZero.
Handler: 0x6610B67C, shared by 2 dispatch slots (real opcode #719). This is the primary slot. Other slots: (5,39) FStVarZero.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As New Collection, x As Variant
For Each x In F()
Next
For Each x In G()
Next
End Sub
Function F() As Variant
End Function
Function G() As Collection
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B67C, dispatch slot 0x661080F0, modOpcodes line 1143.
FStVarZero
(5,0x39)not emitteddup of (4,F7)handler #719Variantinferred_corpusEncoding, evidence and notes
Encoding: FF 39 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B67C, shared by 2 dispatch slots (real opcode #719). This is a duplicate slot of (4,F7) FStVarZero. Other slots: (4,F7) FStVarZero.
Description: none. Handler 0x6610B67C, dispatch slot 0x661081F8, modOpcodes line 1142.
File_IO
File I/O (#)
Close
(3,0x3D)emittedhandler #501File I/O & Printconfirmed_msdocs40 corpus hitsClose.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to Close.
Public Sub Main()
Close #1
End Sub
Encoding, evidence and notes
Encoding: FD 3D (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FD3D Close
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46160C FD3D Close
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB40 FD3D Close
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBFB FD3D Close
40 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_3D_Close.
Handler: 0x661055ED, unique to this slot (real opcode #501).
Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661055ED, dispatch slot 0x66107A08, modOpcodes line 498.
CloseAll
(3,0x3E)emittedhandler #502File I/O & Printconfirmed_msdocs1 corpus hitsCloseAll.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to CloseAll.
Public Sub Main()
Close
End Sub
Encoding, evidence and notes
Encoding: FD 3E (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FD3E CloseAll
Form2.Shellcode2Exe @ 0x470410 | 470945 FD3E CloseAll
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_3E_CloseAll.
Handler: 0x66109A47, unique to this slot (real opcode #502).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109A47, dispatch slot 0x66107A0C, modOpcodes line 499.
GetRec3
(2,0x75)emittedhandler #409File I/O & Printconfirmed_msdocs1 corpus hitsGetRec3.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to GetRec3.
Public Sub Main()
Dim f As Long, s As String
Get #f, , s
End Sub
Encoding, evidence and notes
Encoding: FC 75 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC75 GetRec3
Form2.Shellcode2Exe @ 0x470410 | 47090C FC75 GetRec3
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_75_GetRec3.
Handler: 0x66109BF7, unique to this slot (real opcode #409).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109BF7, dispatch slot 0x661076E8, modOpcodes line 535.
GetRec4
(2,0x76)emittedhandler #410File I/O & Printconfirmed_msdocsGetRec4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to GetRec4.
Public Sub Main()
Dim l As Long, s As String
Get #1, 5, s: Put #1, 5, s
End Sub
Encoding, evidence and notes
Encoding: FC 76 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC76 GetRec4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_76_GetRec4.
Handler: 0x66109C19, unique to this slot (real opcode #410).
Description: draft, by claude-opus-4.7. Handler 0x66109C19, dispatch slot 0x661076EC, modOpcodes line 536.
GetRecFxStr3
(5,0x12)emittedhandler #743File I/O & Printconfirmed_msdocsGetRecFxStr3.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to GetRecFxStr3.
Public Sub Main()
Dim f As String * 10
Get #1, , f: Put #1, , f
End Sub
Encoding, evidence and notes
Encoding: FF 12 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF12 GetRecFxStr3
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_12_GetRecFxStr3.
Handler: 0x66109C85, unique to this slot (real opcode #743).
Description: draft, by claude-opus-4.7. Handler 0x66109C85, dispatch slot 0x6610815C, modOpcodes line 539.
GetRecFxStr4
(5,0x13)emittedhandler #744File I/O & Printconfirmed_msdocsGetRecFxStr4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to GetRecFxStr4.
Public Sub Main()
Dim f As String * 10
Get #1, 3, f: Put #1, 3, f
End Sub
Encoding, evidence and notes
Encoding: FF 13 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF13 GetRecFxStr4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_13_GetRecFxStr4.
Handler: 0x66109CA7, unique to this slot (real opcode #744).
Description: draft, by claude-opus-4.7. Handler 0x66109CA7, dispatch slot 0x66108160, modOpcodes line 540.
GetRecOwn3
(5,0x16)emittedhandler #747UDT / recordinferred_corpus17 corpus hitsGetRecOwn3.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to GetRecOwn3.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r() As TPlain, f As Integer
Get #f, , r
End Sub
Encoding, evidence and notes
Encoding: FF 16 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:
%2(udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF16 0000 GetRecOwn3 udtPoolIndex:0x0
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EA87 FF16 4500 GetRecOwn3 udtPoolIndex:0x45
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB36 FF16 4500 GetRecOwn3 udtPoolIndex:0x45
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F08F FF16 4500 GetRecOwn3 udtPoolIndex:0x45
17 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_16_GetRecOwn3.
Handler: 0x66109CC9, unique to this slot (real opcode #747).
Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109CC9, dispatch slot 0x6610816C, modOpcodes line 541.
GetRecOwn4
(5,0x17)emittedhandler #748UDT / recordinferred_corpus4 corpus hitsGetRecOwn4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to GetRecOwn4.
Private Type TR
a As Long
s As String * 4
End Type
Public Sub Main()
Dim r As TR
Get #1, 2, r
End Sub
Encoding, evidence and notes
Encoding: FF 17 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:
%2(udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF17 0100 GetRecOwn4 udtPoolIndex:0x1
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F0EE FF17 4500 GetRecOwn4 udtPoolIndex:0x45
Form1.mnuWipeStream_Click @ 0x46D520 | 46D906 FF17 4500 GetRecOwn4 udtPoolIndex:0x45
Form1.mnuReplaceStream_Click @ 0x46DAD0 | 46DEF9 FF17 4500 GetRecOwn4 udtPoolIndex:0x45
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_17_GetRecOwn4.
Handler: 0x66109CE6, unique to this slot (real opcode #748).
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109CE6, dispatch slot 0x66108170, modOpcodes line 542.
GetRecOwner3
(2,0x79)not emittedhandler #413UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FC 79 (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109C3B, unique to this slot (real opcode #413).
Description: none. Handler 0x66109C3B, dispatch slot 0x661076F8, modOpcodes line 537.
GetRecOwner4
(2,0x7A)not emittedhandler #414UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FC 7A (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109C60, unique to this slot (real opcode #414).
Description: none. Handler 0x66109C60, dispatch slot 0x661076FC, modOpcodes line 538.
Input
(2,0x7D)not emittedhandler #417File I/O & Printconfirmed_msdocsInput.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to Input.
Encoding, evidence and notes
Encoding: FC 7D (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109A7D, unique to this slot (real opcode #417).
Description: draft, by claude-opus-4.7. Handler 0x66109A7D, dispatch slot 0x66107708, modOpcodes line 503.
InputDone
(2,0x7E)not emittedhandler #418File I/O & Printconfirmed_msdocsInputDone.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputDone.
Encoding, evidence and notes
Encoding: FC 7E (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109A8E, unique to this slot (real opcode #418).
Description: draft, by claude-opus-4.7. Handler 0x66109A8E, dispatch slot 0x6610770C, modOpcodes line 504.
InputFile
(5,0x10)emittedhandler #742File I/O & Printinferred_corpusInput # statement: read a list of items, one descriptor-driven call.Pops the file number and one reference per item (pushed in reverse order with FLdRfVar), then parses each comma-delimited field into its variable according to the type descriptor.
Stack: [..., ref_n, ..., ref_1, filenum:I2] -> [...]
Operands (4 bytes): descriptor index and item count (observed 0000 3000 for 10 items).
Emitted for every Input #n, a, b, .... VB6 SP6 never emits the legacy per-item InputItem* opcodes.
Public Sub Main()
Dim a As Byte, i As Integer, l As Long, f As Single, d As Double, c As Currency, s As String, v As Variant, b As Boolean, dt As Date
Input #1, a, i, l, f, d, c, s, v, b, dt
End Sub
Encoding, evidence and notes
Encoding: FF 10 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF10 00003000 InputFile
FF10 00003000 InputFile
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_10_InputFile.
Handler: 0x66109BB1, unique to this slot (real opcode #742).
Finding: Probe: an entire Input #n, a, b, c statement compiles to one InputFile with a per-item type descriptor. The per-item InputItem* / Input / InputDone opcodes are never emitted by VB6 SP6.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Byte, i As Integer, l As Long, f As Single, d As Double, c As Currency, s As String, v As Variant, b As Boolean, dt As Date
Input #1, a, i, l, f, d, c, s, v, b, dt
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109BB1, dispatch slot 0x66108154, modOpcodes line 505.
InputItemBool
(2,0x87)not emittedhandler #427File I/O & Printconfirmed_msdocsInputItemBool.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemBool.
Encoding, evidence and notes
Encoding: FC 87 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109ABF, unique to this slot (real opcode #427).
Description: draft, by claude-opus-4.7. Handler 0x66109ABF, dispatch slot 0x66107730, modOpcodes line 514.
InputItemCy
(2,0x84)not emittedhandler #424File I/O & Printconfirmed_msdocsInputItemCy.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemCy.
Encoding, evidence and notes
Encoding: FC 84 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109B65, unique to this slot (real opcode #424).
Description: draft, by claude-opus-4.7. Handler 0x66109B65, dispatch slot 0x66107724, modOpcodes line 511.
InputItemDate
(2,0x88)not emittedhandler #428File I/O & Printconfirmed_msdocsInputItemDate.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemDate.
Encoding, evidence and notes
Encoding: FC 88 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109B3A, unique to this slot (real opcode #428).
Description: draft, by claude-opus-4.7. Handler 0x66109B3A, dispatch slot 0x66107734, modOpcodes line 515.
InputItemI2
(2,0x80)not emittedhandler #420File I/O & Printconfirmed_msdocsInputItemI2.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemI2.
Encoding, evidence and notes
Encoding: FC 80 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109AE3, unique to this slot (real opcode #420).
Description: draft, by claude-opus-4.7. Handler 0x66109AE3, dispatch slot 0x66107714, modOpcodes line 507.
InputItemI4
(2,0x81)not emittedhandler #421File I/O & Printconfirmed_msdocsInputItemI4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemI4.
Encoding, evidence and notes
Encoding: FC 81 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109B34, unique to this slot (real opcode #421).
Description: draft, by claude-opus-4.7. Handler 0x66109B34, dispatch slot 0x66107718, modOpcodes line 508.
InputItemR4
(2,0x82)not emittedhandler #422File I/O & Printconfirmed_msdocsInputItemR4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemR4.
Encoding, evidence and notes
Encoding: FC 82 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109B13, unique to this slot (real opcode #422).
Description: draft, by claude-opus-4.7. Handler 0x66109B13, dispatch slot 0x6610771C, modOpcodes line 509.
InputItemR8
(2,0x83)not emittedhandler #423File I/O & Printconfirmed_msdocsInputItemR8.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemR8.
Encoding, evidence and notes
Encoding: FC 83 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109B5F, unique to this slot (real opcode #423).
Description: draft, by claude-opus-4.7. Handler 0x66109B5F, dispatch slot 0x66107720, modOpcodes line 510.
InputItemStr
(2,0x86)not emittedhandler #426File I/O & Printconfirmed_msdocsInputItemStr.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemStr.
Encoding, evidence and notes
Encoding: FC 86 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109AE9, unique to this slot (real opcode #426).
Description: draft, by claude-opus-4.7. Handler 0x66109AE9, dispatch slot 0x6610772C, modOpcodes line 513.
InputItemUI1
(2,0x7F)not emittedhandler #419File I/O & Printconfirmed_msdocsInputItemUI1.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemUI1.
Encoding, evidence and notes
Encoding: FC 7F (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109A9F, unique to this slot (real opcode #419).
Description: draft, by claude-opus-4.7. Handler 0x66109A9F, dispatch slot 0x66107710, modOpcodes line 506.
InputItemVar
(2,0x85)not emittedhandler #425File I/O & Printconfirmed_msdocsInputItemVar.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to InputItemVar.
Encoding, evidence and notes
Encoding: FC 85 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109B6B, unique to this slot (real opcode #425).
Description: draft, by claude-opus-4.7. Handler 0x66109B6B, dispatch slot 0x66107728, modOpcodes line 512.
LineInputStr
(2,0xC0)emittedhandler #456File I/O & Printconfirmed_msdocsLineInputStr.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to LineInputStr.
Public Sub Main()
Dim s As String, v As Variant
Line Input #1, s
End Sub
Encoding, evidence and notes
Encoding: FC C0 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCC0 LineInputStr
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_C0_LineInputStr.
Handler: 0x66109BD5, unique to this slot (real opcode #456).
Description: draft, by claude-opus-4.7. Handler 0x66109BD5, dispatch slot 0x66107814, modOpcodes line 517.
LineInputVar
(2,0xBF)emittedhandler #455File I/O & Printconfirmed_msdocsLineInputVar.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to LineInputVar.
Public Sub Main()
Dim s As String, v As Variant
Line Input #1, v
End Sub
Encoding, evidence and notes
Encoding: FC BF (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCBF LineInputVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BF_LineInputVar.
Handler: 0x66109BE6, unique to this slot (real opcode #455).
Description: draft, by claude-opus-4.7. Handler 0x66109BE6, dispatch slot 0x66107810, modOpcodes line 516.
LockFile
(4,0x5E)emittedhandler #618File I/O & Printinferred_corpusLock / Unlock statement.Pops the record range and the file number and locks or unlocks the region.
Stack: [..., filenum:I2, from:I4, to:I4] -> [...]
Operand (16-bit): flags selecting lock/unlock and whether a range was given (observed 0x0005 for Unlock #1, 3).
Emitted for Lock #n[, rec | from To to] and Unlock ....
Public Sub Main()
Unlock #1, 3
End Sub
Encoding, evidence and notes
Encoding: FE 5E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE5E 0500 LockFile
FE5E 0500 LockFile
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_5E_LockFile.
Handler: 0x66109D3D, unique to this slot (real opcode #618).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Unlock #1, 3
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109D3D, dispatch slot 0x66107E8C, modOpcodes line 497.
NameFile
(1,0xFB)emittedhandler #352File I/O & Printconfirmed_msdocs2 corpus hitsNameFile.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to NameFile.
Public Sub Main()
Name "c:\a" As "c:\b"
End Sub
Encoding, evidence and notes
Encoding: FB FB (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFB NameFile
Form1.ucAsyncDownload1_(fPath As String) @ 0x445F60 | 445F86 FBFB NameFile
fso.Proc_44160C @ 0x44160C | 441640 FBFB NameFile
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FB_NameFile.
Handler: 0x66109D66, unique to this slot (real opcode #352).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109D66, dispatch slot 0x66107500, modOpcodes line 501.
OpenFile
(4,0x5D)emittedhandler #617File I/O & Printcontextual40 corpus hitsOpen statement: pop file name, file number and record length; open the file.Pops the record length (observed -1 = default, pushed as LitI2_Byte 255), the file number and the file name, then opens the file through the runtime file table.
Stack: [..., name:Str, filenum:I2, reclen:I2] -> [...]
Operand (16-bit): mode/access/lock flags (observed 0x0002 for For Output; vbdec decodes the mode).
Emitted for every Open ... For ... As #n [Len = x].
Public Sub Main()
Open "c:\x.txt" For Output As #1
End Sub
Encoding, evidence and notes
Encoding: FE 5D (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE5D 0200 OpenFile output
FE5D 0200 OpenFile output
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_5D_OpenFile.
Handler: 0x661055D5, unique to this slot (real opcode #617).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.
Public Sub Main()
Open "c:\x.txt" For Output As #1
End SubDescription: draft, by claude-opus-5-5. Handler 0x661055D5, dispatch slot 0x66107E88, modOpcodes line 496.
PutRec3
(2,0x77)emittedhandler #411File I/O & Printconfirmed_msdocs3 corpus hitsPutRec3.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to PutRec3.
Public Sub Main()
Put #1, , "abc"
End Sub
Encoding, evidence and notes
Encoding: FC 77 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC77 PutRec3
lzma.Proc_46E084 @ 0x46E084 | 46E4CF FC77 PutRec3
lzma.Proc_46E084 @ 0x46E084 | 46E4ED FC77 PutRec3
lzma.Proc_46E084 @ 0x46E084 | 46E504 FC77 PutRec3
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_77_PutRec3.
Handler: 0x66109C08, unique to this slot (real opcode #411).
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109C08, dispatch slot 0x661076F0, modOpcodes line 544.
PutRec4
(2,0x78)emittedhandler #412File I/O & Printconfirmed_msdocsPutRec4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to PutRec4.
Public Sub Main()
Put #1, 2, 1.5
End Sub
Encoding, evidence and notes
Encoding: FC 78 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC78 PutRec4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_78_PutRec4.
Handler: 0x66109C2A, unique to this slot (real opcode #412).
Description: draft, by claude-opus-4.7. Handler 0x66109C2A, dispatch slot 0x661076F4, modOpcodes line 545.
PutRecFxStr3
(5,0x14)emittedhandler #745File I/O & Printconfirmed_msdocsPutRecFxStr3.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to PutRecFxStr3.
Public Sub Main()
Dim f As String * 10
Get #1, , f: Put #1, , f
End Sub
Encoding, evidence and notes
Encoding: FF 14 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF14 PutRecFxStr3
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_14_PutRecFxStr3.
Handler: 0x66109C96, unique to this slot (real opcode #745).
Description: draft, by claude-opus-4.7. Handler 0x66109C96, dispatch slot 0x66108164, modOpcodes line 548.
PutRecFxStr4
(5,0x15)emittedhandler #746File I/O & Printconfirmed_msdocsPutRecFxStr4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to PutRecFxStr4.
Public Sub Main()
Dim f As String * 10
Get #1, 3, f: Put #1, 3, f
End Sub
Encoding, evidence and notes
Encoding: FF 15 (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF15 PutRecFxStr4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_15_PutRecFxStr4.
Handler: 0x66109CB8, unique to this slot (real opcode #746).
Description: draft, by claude-opus-4.7. Handler 0x66109CB8, dispatch slot 0x66108168, modOpcodes line 549.
PutRecOwn3
(5,0x18)emittedhandler #749UDT / recordinferred_corpus36 corpus hitsPutRecOwn3.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to PutRecOwn3.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r() As TPlain, f As Integer
Put #f, , r
End Sub
Encoding, evidence and notes
Encoding: FF 18 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:
%2(udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF18 0000 PutRecOwn3 udtPoolIndex:0x0
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 461602 FF18 4500 PutRecOwn3 udtPoolIndex:0x45
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBE3 FF18 4500 PutRecOwn3 udtPoolIndex:0x45
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EBF0 FF18 4500 PutRecOwn3 udtPoolIndex:0x45
36 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_18_PutRecOwn3.
Handler: 0x66109D03, unique to this slot (real opcode #749).
Corpus: 36 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109D03, dispatch slot 0x66108174, modOpcodes line 550.
PutRecOwn4
(5,0x19)emittedhandler #750UDT / recordinferred_corpus2 corpus hitsPutRecOwn4.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to PutRecOwn4.
Private Type TR
a As Long
s As String * 4
End Type
Public Sub Main()
Dim r As TR
Put #1, 2, r
End Sub
Encoding, evidence and notes
Encoding: FF 19 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPoolIndex:%2
Operands:
%2(udtPoolIndex): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF19 0000 PutRecOwn4 udtPoolIndex:0x0
Form1.mnuWipeStream_Click @ 0x46D520 | 46D9C7 FF19 4500 PutRecOwn4 udtPoolIndex:0x45
Form2.Shellcode2Exe @ 0x470410 | 47093D FF19 8A00 PutRecOwn4 udtPoolIndex:0x8A
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_19_PutRecOwn4.
Handler: 0x66109D20, unique to this slot (real opcode #750).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109D20, dispatch slot 0x66108178, modOpcodes line 551.
PutRecOwner3
(2,0x7B)not emittedhandler #415UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FC 7B (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109C58, unique to this slot (real opcode #415).
Description: none. Handler 0x66109C58, dispatch slot 0x66107700, modOpcodes line 546.
PutRecOwner4
(2,0x7C)not emittedhandler #416UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FC 7C (lead byte FC selects table 2), then a variable-length operand block (the first operand gives its byte count).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109C7D, unique to this slot (real opcode #416).
Description: none. Handler 0x66109C7D, dispatch slot 0x66107704, modOpcodes line 547.
SeekFile
(1,0xFA)emittedhandler #351File I/O & Printconfirmed_msdocs1 corpus hitsSeekFile.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to SeekFile.
Public Sub Main()
Dim n As Long
Seek #1, 5
End Sub
Encoding, evidence and notes
Encoding: FB FA (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBFA SeekFile
Form2.Shellcode2Exe @ 0x470410 | 4708E7 FBFA SeekFile
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_FA_SeekFile.
Handler: 0x66109D55, unique to this slot (real opcode #351).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66109D55, dispatch slot 0x661074FC, modOpcodes line 500.
WriteChan
(3,0x33)not emittedhandler #491File I/O & Printconfirmed_msdocsWriteChan.Implements one of VB6's Open/Close/Print/Write/Get/Put/Seek/Name/Reset statements. Operates on the legacy file-number (#N) channel table maintained by msvbvm60. See the printf template for argument layout.
Emitted at the source-level file I/O keyword that lowers to WriteChan.
Encoding, evidence and notes
Encoding: FD 33 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109A6C, unique to this slot (real opcode #491).
Description: draft, by claude-opus-4.7. Handler 0x66109A6C, dispatch slot 0x661079E0, modOpcodes line 520.
WriteFile
(5,0x0F)emittedhandler #741File I/O & Printinferred_corpusWrite # statement: write a list of items, one descriptor-driven call.Pops the file number and the items, and writes them comma-delimited with quoting, followed by a newline, according to the descriptor.
Operands (4 bytes): descriptor index and argument byte count (observed 0000 0800 for Write #1,).
Emitted for every Write #n, .... The legacy WriteChan opcode is never emitted.
Public Sub Main()
Dim n As Long, s As String, v As Variant, d As Date, c As Currency, b As Boolean
Write #1,
End Sub
Encoding, evidence and notes
Encoding: FF 0F (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF0F 00000800 WriteFile
FF0F 00000800 WriteFile
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0F_WriteFile.
Handler: 0x6610B8D6, unique to this slot (real opcode #741).
Finding: Probe: an entire Write #n, ... statement compiles to one WriteFile with a descriptor. WriteChan (3,33) is never emitted.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim n As Long, s As String, v As Variant, d As Date, c As Currency, b As Boolean
Write #1,
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B8D6, dispatch slot 0x66108150, modOpcodes line 519.
Frame
Frame slot manipulation, no-pop variants
DestructAnsiOFrame
(4,0xF6)emittedhandler #718Stack & frameinferred_corpus5 corpus hitsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Private Type TR
s As String
End Type
Private Declare Sub P Lib "x.dll" (r As Any)
Public Sub Main()
Dim r As TR
P r
End Sub
Encoding, evidence and notes
Encoding: FE F6 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a pool:%2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2(pool): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FEF6 74FF0000 DestructAnsiOFrame var_8C pool:0x0
clsCmnDlg.OpenDialog @ 0x457B6C | 457C71 FEF6 24FF1700 DestructAnsiOFrame var_DC pool:0x17
clsCmnDlg.SaveDialog @ 0x45F270 | 45F3BD FEF6 1CFF1700 DestructAnsiOFrame var_E4 pool:0x17
clsCmnDlg.ColorDialog @ 0x453728 | 4537BA FEF6 00FF2D00 DestructAnsiOFrame var_100 pool:0x2D
5 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F6_DestructAnsiOFrame.
Handler: 0x6610C0A1, unique to this slot (real opcode #718).
Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610C0A1, dispatch slot 0x661080EC, modOpcodes line 429.
DestructOFrame
(3,0xFF)emittedhandler #594UDT / recordinferred_corpusPrepares the frame slot %a for a UDT returned by a call, so that later destruction of the temporary is safe. Observed right before calling a function As TRec whose UDT contains a String.
Operands: %a frame slot (2 bytes) and a 16-bit UDT-descriptor index (observed 0).
Emitted before calling a function that returns a UDT containing reference-counted members (String/Variant/Object).
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TRec
r = F()
End Sub
Private Function F() As TRec
F.a = 1
End Function
Encoding, evidence and notes
Encoding: FD FF (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FDFF 44FF0000 DestructOFrame
FDFF 44FF0000 DestructOFrame
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_FF_DestructOFrame.
Handler: 0x6610C07D, unique to this slot (real opcode #594).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TRec
r = F()
End Sub
Private Function F() As TRec
F.a = 1
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610C07D, dispatch slot 0x66107D10, modOpcodes line 428.
EraseNoPop
(4,0xCF)not emittedhandler #691Arrayconfirmed_msdocsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Encoding, evidence and notes
Encoding: FE CF (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109109, unique to this slot (real opcode #691).
Description: draft, by claude-opus-4.7. Handler 0x66109109, dispatch slot 0x66108050, modOpcodes line 460.
LdFrameRf
(4,0x2F)not emittedhandler #613Stack & frameinferred_corpusEncoding, evidence and notes
Encoding: FE 2F (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BFB4, unique to this slot (real opcode #613).
Description: none. Handler 0x6610BFB4, dispatch slot 0x66107DD0, modOpcodes line 980.
LdPrUnkVar
(2,0x73)not emittedhandler #407Object / COMconfirmed_msdocsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Encoding, evidence and notes
Encoding: FC 73 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109E21, unique to this slot (real opcode #407).
Description: draft, by claude-opus-4.7. Handler 0x66109E21, dispatch slot 0x661076E0, modOpcodes line 981.
LdPrVar
(3,0x9F)emittedhandler #552Object / COMconfirmed_msdocs1 corpus hitsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
v.DoIt n
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FD 9F (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FD9F LdPrVar
Form2.cmdRun_Click @ 0x469FCC | 46A02E FD9F LdPrVar
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_9F_LdPrVar.
Handler: 0x66105729, unique to this slot (real opcode #552).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105729, dispatch slot 0x66107B90, modOpcodes line 982.
LdStkRf
(4,0x2E)not emittedhandler #612Stack & frameinferred_corpusEncoding, evidence and notes
Encoding: FE 2E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BF9F, unique to this slot (real opcode #612).
Description: none. Handler 0x6610BF9F, dispatch slot 0x66107DCC, modOpcodes line 979.
SetVarVar
(4,0x4D)emittedhandler #615Variantconfirmed_msdocsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Public Sub Main()
Dim v As Variant, w As Variant
Set v = w
End Sub
Encoding, evidence and notes
Encoding: FE 4D (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE4D SetVarVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_4D_SetVarVar.
Handler: 0x6610B669, unique to this slot (real opcode #615).
Description: draft, by claude-opus-4.7. Handler 0x6610B669, dispatch slot 0x66107E48, modOpcodes line 461.
SetVarVarFunc
(4,0x4E)emittedhandler #616Variantconfirmed_msdocsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
Set w = v.Child
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FE 4E (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FE4E SetVarVarFunc
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_4E_SetVarVarFunc.
Handler: 0x6610B656, unique to this slot (real opcode #616).
Description: draft, by claude-opus-4.7. Handler 0x6610B656, dispatch slot 0x66107E4C, modOpcodes line 462.
StUdtVar
(5,0x35)emittedhandler #762UDT / recordinferred_corpusudt = v).Pops a Variant that contains a record (VT_RECORD), checks the record type against the destination UDT and copies the fields into it.
Operand: a 16-bit constant-pool index of the record type (observed 0).
Emitted when a Variant is assigned to a public/typelib UDT variable (probe: gr = v, gr As TPubRec from a type library).
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec
Public Sub Main()
Dim v As Variant
gr = v
End Sub
Encoding, evidence and notes
Encoding: FF 35 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF35 0000 StUdtVar
FF35 0000 StUdtVar
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_35_StUdtVar.
Handler: 0x661098D4, unique to this slot (real opcode #762).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Dim gr As TPubRec
Public Sub Main()
Dim v As Variant
gr = v
End SubDescription: draft, by claude-opus-5-5. Handler 0x661098D4, dispatch slot 0x661081E8, modOpcodes line 983.
ZeroRetVal
(5,0x2D)emittedhandler #754Stack & frameconfirmed_msdocs38 corpus hitsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Public Sub Main()
Dim o As New CR, s As String
End Sub
' ---- CR.cls
Public Function F(ByVal n As Long) As String
If n Then F = "x": Exit Function
F = "y"
End Function
Encoding, evidence and notes
Encoding: FF 2D (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF2D ZeroRetVal
Form1.Proc_43F4AC @ 0x43F4AC | 43F4AE FF2D ZeroRetVal
Form1.GetActiveData @ 0x464174 | 464176 FF2D ZeroRetVal
Form1.safe @ 0x44D7B8 | 44D7BE FF2D ZeroRetVal
38 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2D_ZeroRetVal.
Handler: 0x66106950, unique to this slot (real opcode #754).
Corpus: 38 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106950, dispatch slot 0x661081C8, modOpcodes line 458.
ZeroRetValVar
(5,0x2E)emittedhandler #755Stack & frameconfirmed_msdocs75 corpus hitsAdjusts a frame-relative storage slot. See operand %a for the slot reference. Frame slots are local variables and arguments addressed as [ebp+offset].
Emitted at variable load/store boundaries when no specialized loader applies.
Public Sub Main()
Dim o As New CR, b As Variant
End Sub
' ---- CR.cls
Public Function F(ByVal n As Long) As Variant
End Function
Public Property Get P() As Variant
End Property
Private Function PF() As Variant
End Function
Public Sub Work()
Dim b As Variant
b = F(1)
b = Me.F(2)
b = P
b = PF()
F 3
PF
End Sub
Encoding, evidence and notes
Encoding: FF 2E (lead byte FF selects table 5), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FF2E ZeroRetValVar
Form1.RegisterPlugin @ 0x44CB20 | 44CB20 FF2E ZeroRetValVar
Form1.DoEventsFor @ 0x44256C | 44256E FF2E ZeroRetValVar
Form1.SleepFor @ 0x43E7AC | 43E7AE FF2E ZeroRetValVar
75 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2E_ZeroRetValVar.
Handler: 0x66106966, unique to this slot (real opcode #755).
Corpus: 75 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106966, dispatch slot 0x661081CC, modOpcodes line 459.
IWMem_Load
IWMem loads: read through [W-base + offset], dereferenced once. Prefix: I + W + Mem + Ld (Phase 3a).
IWMemLdCy
(3,0x44)not emittedprimary of 2handler #506CurrencycontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):Cy]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a49a at 0x6610a49a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 44 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A49A, shared by 2 dispatch slots (real opcode #506). This is the primary slot. Other slots: (3,45) IWMemLdCy.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A49A, dispatch slot 0x66107A24, modOpcodes line 1253.
IWMemLdCy
(3,0x45)not emitteddup of (3,44)handler #506Currencyconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):Cy]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a49a at 0x6610a49a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 45 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A49A, shared by 2 dispatch slots (real opcode #506). This is a duplicate slot of (3,44) IWMemLdCy. Other slots: (3,44) IWMemLdCy.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A49A, dispatch slot 0x66107A28, modOpcodes line 1254.
IWMemLdDarg
(3,0x4D)not emittedhandler #512VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b1bd at 0x6610b1bd in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 4D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B1BD, unique to this slot (real opcode #512).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B1BD, dispatch slot 0x66107A48, modOpcodes line 1262.
IWMemLdFPR4
(3,0x49)not emittedhandler #508Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Single via x87 FPU.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):FPR4]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a4b6 at 0x6610a4b6 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 49 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A4B6, unique to this slot (real opcode #508).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A4B6, dispatch slot 0x66107A38, modOpcodes line 1258.
IWMemLdFPR8
(3,0x4A)not emittedhandler #509Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Double via x87 FPU.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):FPR8]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a4cf at 0x6610a4cf in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 4A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A4CF, unique to this slot (real opcode #509).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A4CF, dispatch slot 0x66107A3C, modOpcodes line 1259.
IWMemLdI2
(3,0x41)not emittedhandler #504IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 16-bit signed integer (VB6 Integer).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):I2]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a466 at 0x6610a466 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 41 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A466, unique to this slot (real opcode #504).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A466, dispatch slot 0x66107A18, modOpcodes line 1250.
IWMemLdI4
(3,0x42)not emittedprimary of 4handler #505IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 42 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is the primary slot. Other slots: (3,43) IWMemLdI4, (3,47) IWMemLdI4, (3,48) IWMemLdI4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(3,0x43) IWMemLdI4, (3,0x47) IWMemLdI4, (3,0x48) IWMemLdI4
Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A1C, modOpcodes line 1251.
IWMemLdI4
(3,0x43)not emitteddup of (3,42)handler #505Integerconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 43 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is a duplicate slot of (3,42) IWMemLdI4. Other slots: (3,42) IWMemLdI4, (3,47) IWMemLdI4, (3,48) IWMemLdI4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(3,0x42) IWMemLdI4, (3,0x47) IWMemLdI4, (3,0x48) IWMemLdI4
Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A20, modOpcodes line 1252.
IWMemLdI4
(3,0x47)not emitteddup of (3,42)handler #505Integerconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 47 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is a duplicate slot of (3,42) IWMemLdI4. Other slots: (3,42) IWMemLdI4, (3,43) IWMemLdI4, (3,48) IWMemLdI4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(3,0x42) IWMemLdI4, (3,0x43) IWMemLdI4, (3,0x48) IWMemLdI4
Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A30, modOpcodes line 1256.
IWMemLdI4
(3,0x48)not emitteddup of (3,42)handler #505Integerconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 32-bit signed integer (VB6 Long).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):I4]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a481 at 0x6610a481 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 48 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A481, shared by 4 dispatch slots (real opcode #505). This is a duplicate slot of (3,42) IWMemLdI4. Other slots: (3,42) IWMemLdI4, (3,43) IWMemLdI4, (3,47) IWMemLdI4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(3,0x42) IWMemLdI4, (3,0x43) IWMemLdI4, (3,0x47) IWMemLdI4
Description: draft, by claude-opus-4.7. Handler 0x6610A481, dispatch slot 0x66107A34, modOpcodes line 1257.
IWMemLdPr
(3,0x4B)not emittedprimary of 2handler #510Object / COMcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual object pointer.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):Pr]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b228 at 0x6610b228 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 4B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B228, shared by 2 dispatch slots (real opcode #510). This is the primary slot. Other slots: (4,DB) IWMemLdPr.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B228, dispatch slot 0x66107A40, modOpcodes line 1260.
IWMemLdPr
(4,0xDB)not emitteddup of (3,4B)handler #510Object / COMconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual object pointer.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):Pr]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b228 at 0x6610b228 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE DB (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B228, shared by 2 dispatch slots (real opcode #510). This is a duplicate slot of (3,4B) IWMemLdPr. Other slots: (3,4B) IWMemLdPr.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B228, dispatch slot 0x66108080, modOpcodes line 1281.
IWMemLdRf
(3,0x4C)not emittedhandler #511Stack & framecontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual reference / ByRef slot.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):Rf]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a4e8 at 0x6610a4e8 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 4C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A4E8, unique to this slot (real opcode #511).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A4E8, dispatch slot 0x66107A44, modOpcodes line 1261.
IWMemLdRfDarg
(3,0x46)not emittedhandler #507VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [...] -> [..., (([([ebp+10h] + offset)])):]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b1f5 at 0x6610b1f5 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 46 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B1F5, unique to this slot (real opcode #507).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B1F5, dispatch slot 0x66107A2C, modOpcodes line 1255.
IWMemLdUI1
(3,0x40)not emittedhandler #503IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final load. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 8-bit unsigned (VB6 Byte).
Stack: [...] -> [..., (([([ebp+10h] + offset)])):UI1]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a44b at 0x6610a44b in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual source ptr
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 40 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A44B, unique to this slot (real opcode #503).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A44B, dispatch slot 0x66107A14, modOpcodes line 1249.
IWMem_Store
IWMem stores: write through [W-base + offset], dereferenced once. Prefix: I + W + Mem + St (Phase 3a).
IWMemStAd
(3,0x58)not emittedhandler #519Object / COMcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual raw 32-bit address.
Stack: [..., v:Ad] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b3af at 0x6610b3af in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 58 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B3AF, unique to this slot (real opcode #519).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B3AF, dispatch slot 0x66107A74, modOpcodes line 1271.
IWMemStAdFunc
(3,0x5F)not emittedhandler #526Object / COMcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b39a at 0x6610b39a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 5F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B39A, unique to this slot (real opcode #526).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B39A, dispatch slot 0x66107A90, modOpcodes line 1278.
IWMemStCy
(3,0x54)not emittedprimary of 2handler #516CurrencycontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).
Stack: [..., v:Cy] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a54e at 0x6610a54e in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 54 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A54E, shared by 2 dispatch slots (real opcode #516). This is the primary slot. Other slots: (3,55) IWMemStCy.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A54E, dispatch slot 0x66107A64, modOpcodes line 1267.
IWMemStCy
(3,0x55)not emitteddup of (3,54)handler #516Currencyconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Currency (64-bit scaled int).
Stack: [..., v:Cy] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a54e at 0x6610a54e in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 55 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A54E, shared by 2 dispatch slots (real opcode #516). This is a duplicate slot of (3,54) IWMemStCy. Other slots: (3,54) IWMemStCy.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A54E, dispatch slot 0x66107A68, modOpcodes line 1268.
IWMemStDarg
(3,0x56)not emittedhandler #517VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b7b8 at 0x6610b7b8 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 56 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B7B8, unique to this slot (real opcode #517).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B7B8, dispatch slot 0x66107A6C, modOpcodes line 1269.
IWMemStDargAd
(3,0x5B)not emittedhandler #522VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual raw 32-bit address.
Stack: [..., v:Ad] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b45c at 0x6610b45c in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 5B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B45C, unique to this slot (real opcode #522).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B45C, dispatch slot 0x66107A80, modOpcodes line 1274.
IWMemStDargAdFunc
(3,0x5C)not emittedhandler #523VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b44a at 0x6610b44a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 5C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B44A, unique to this slot (real opcode #523).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B44A, dispatch slot 0x66107A84, modOpcodes line 1275.
IWMemStDargCopy
(3,0x60)not emittedhandler #527VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b795 at 0x6610b795 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 60 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B795, unique to this slot (real opcode #527).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B795, dispatch slot 0x66107A94, modOpcodes line 1279.
IWMemStDargUnk
(3,0x5D)not emittedhandler #524VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b60e at 0x6610b60e in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 5D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B60E, unique to this slot (real opcode #524).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B60E, dispatch slot 0x66107A88, modOpcodes line 1276.
IWMemStDargUnkFunc
(3,0x5E)not emittedhandler #525VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b5f9 at 0x6610b5f9 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 5E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B5F9, unique to this slot (real opcode #525).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B5F9, dispatch slot 0x66107A8C, modOpcodes line 1277.
IWMemStFPR4
(3,0x59)not emittedhandler #520Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Single via x87 FPU.
Stack: [..., v:FPR4] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a56a at 0x6610a56a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 59 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A56A, unique to this slot (real opcode #520).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A56A, dispatch slot 0x66107A78, modOpcodes line 1272.
IWMemStFPR8
(3,0x5A)not emittedhandler #521Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual Double via x87 FPU.
Stack: [..., v:FPR8] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a58d at 0x6610a58d in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 5A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A58D, unique to this slot (real opcode #521).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A58D, dispatch slot 0x66107A7C, modOpcodes line 1273.
IWMemStI2
(3,0x51)not emittedhandler #514IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 16-bit signed integer (VB6 Integer).
Stack: [..., v:I2] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a51a at 0x6610a51a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 51 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A51A, unique to this slot (real opcode #514).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A51A, dispatch slot 0x66107A58, modOpcodes line 1264.
IWMemStR4
(3,0x52)not emittedprimary of 2handler #515IntegercontextualPops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand plus one extra dereference. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.
Stack: [..., v:R4] -> [...]
Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.
Handler label: label near 0x6610a535 at 0x6610a535 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 52 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A535, shared by 2 dispatch slots (real opcode #515). This is the primary slot. Other slots: (3,53) IWMemStR4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-5-5. Handler 0x6610A535, dispatch slot 0x66107A5C, modOpcodes line 1265.
IWMemStR4
(3,0x53)not emitteddup of (3,52)handler #515Integerconfirmed_handlerPops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand plus one extra dereference. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.
Stack: [..., v:R4] -> [...]
Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.
Handler label: label near 0x6610a535 at 0x6610a535 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 53 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A535, shared by 2 dispatch slots (real opcode #515). This is a duplicate slot of (3,52) IWMemStR4. Other slots: (3,52) IWMemStR4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-5-5. Handler 0x6610A535, dispatch slot 0x66107A60, modOpcodes line 1266.
IWMemStStr
(3,0x57)not emittedhandler #518StringcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual BSTR pointer (VB6 String).
Stack: [..., v:Str] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b290 at 0x6610b290 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 57 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B290, unique to this slot (real opcode #518).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B290, dispatch slot 0x66107A70, modOpcodes line 1270.
IWMemStStrCopy
(3,0x61)not emittedhandler #528StringcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual value of suffix ``.
Stack: [..., v:] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b2b0 at 0x6610b2b0 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 61 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B2B0, unique to this slot (real opcode #528).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B2B0, dispatch slot 0x66107A98, modOpcodes line 1280.
IWMemStUI1
(3,0x50)not emittedhandler #513IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is an IWMem (indirect-W) variant: after computing base = [ebp+10h] + offset, the handler performs one extra dereference (mov eax, [eax]) before the final store. The slot at [ebp+10h] + offset is treated as itself a pointer to the actual 8-bit unsigned (VB6 Byte).
Stack: [..., v:UI1] -> [...] (([([ebp+10h] + offset)]) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a500 at 0x6610a500 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
mov eax, [eax] ; deref -> actual destination ptr
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FD 50 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A500, unique to this slot (real opcode #513).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A500, dispatch slot 0x66107A54, modOpcodes line 1263.
I_IndirectLoad
Load through pointer at stack top Prefix: I = indirect (top-of-stack is address)
ILdDarg
(3,0x1D)not emittedhandler #479Variantinferred_corpus8 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a through a runtime address.
Encoding, evidence and notes
Encoding: FD 1D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD1D 0C00 ILdDarg arg_C
CScriptFunctions.GetPageNumWords @ 0x442608 | 442611 FD1D 0C00 ILdDarg arg_C
CScriptFunctions.GetPageNthWord @ 0x44018C | 440197 FD1D 0C00 ILdDarg arg_C
CScriptFunctions.GetPageNthWord @ 0x44018C | 44019B FD1D 1000 ILdDarg arg_10
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B1D8, unique to this slot (real opcode #479).
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B1D8, dispatch slot 0x66107988, modOpcodes line 1175.
ILdFPR4
(0,0x82)emittedprimary of 2handler #127Floating pointinferred_corpus1 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):FPR4]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a FPR4 through a runtime address.
Public Sub Main()
Dim a As Single
End Sub
Sub P(x As Single)
Dim b As Single
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 82, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 82 0C00 ILdFPR4 arg_C
Form2.splitter_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) @ 0x4458E0 | 445946 82 1800 ILdFPR4 arg_18
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_82_ILdFPR4.
Handler: 0x66105A43, shared by 2 dispatch slots (real opcode #127). This is the primary slot. Other slots: (3,19) ILdFPR4.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105A43, dispatch slot 0x66106F1C, modOpcodes line 1169.
ILdFPR4
(3,0x19)not emitteddup of (0,82)handler #127Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD 19 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A43, shared by 2 dispatch slots (real opcode #127). This is a duplicate slot of (0,82) ILdFPR4. Other slots: (0,82) ILdFPR4.
Description: none. Handler 0x66105A43, dispatch slot 0x66107978, modOpcodes line 1170.
ILdFPR8
(0,0x83)emittedprimary of 2handler #128Floating pointinferred_corpusReads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from the variable a ByRef argument (or other frame-held pointer) points to.
Stack: [...] -> [..., v:FPR8]
Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).
Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.
Emitted for reads of the variable a ByRef argument (or other frame-held pointer) points to when the value is a Double/Date. The storage class selects the prefix (I); the value class selects the suffix (FPR8).
Public Sub Main()
Dim a As Date
End Sub
Sub P(x As Date)
Dim b As Date
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 83, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 83 0C00 ILdFPR8 arg_C
83 0C00 ILdFPR8 arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_83_ILdFPR8.
Handler: 0x6610A3A3, shared by 2 dispatch slots (real opcode #128). This is the primary slot. Other slots: (3,1A) ILdFPR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Date
End Sub
Sub P(x As Date)
Dim b As Date
b = x
x = b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A3A3, dispatch slot 0x66106F20, modOpcodes line 1171.
ILdFPR8
(3,0x1A)not emitteddup of (0,83)handler #128Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD 1A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A3A3, shared by 2 dispatch slots (real opcode #128). This is a duplicate slot of (0,83) ILdFPR8. Other slots: (0,83) ILdFPR8.
Description: none. Handler 0x6610A3A3, dispatch slot 0x6610797C, modOpcodes line 1172.
ILdI2
(0,0x7F)emittedprimary of 2handler #124Integerinferred_corpus102 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):I2]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a I2 through a runtime address.
Public Sub Main()
Dim a As Boolean
End Sub
Sub P(x As Boolean)
Dim b As Boolean
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 7F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 7F 0C00 ILdI2 [arg_C]
Form1.RegisterPlugin @ 0x44CB20 | 44CBCD 7F 1400 ILdI2 [arg_14]
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1A8 7F 0C00 ILdI2 [arg_C]
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A2CF 7F 0C00 ILdI2 [arg_C]
102 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7F_ILdI2.
Handler: 0x66105A11, shared by 2 dispatch slots (real opcode #124). This is the primary slot. Other slots: (3,11) ILdI2.
Corpus: 102 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105A11, dispatch slot 0x66106F10, modOpcodes line 1157.
ILdI2
(3,0x11)not emitteddup of (0,7F)handler #124Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 11 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A11, shared by 2 dispatch slots (real opcode #124). This is a duplicate slot of (0,7F) ILdI2. Other slots: (0,7F) ILdI2.
Description: none. Handler 0x66105A11, dispatch slot 0x66107958, modOpcodes line 1158.
ILdI4
(0,0x80)emittedprimary of 5handler #125Integerinferred_corpus262 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):I4]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a I4 through a runtime address.
Public Sub Main()
Dim c As Collection
End Sub
Sub P(x As Collection)
Set x = New Collection
Dim y As Collection
Set y = x
End Sub
Encoding, evidence and notes
Encoding: 80, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 80 0C00 ILdI4 [arg_C]
Form1.RegisterPlugin @ 0x44CB20 | 44CB6A 80 1000 ILdI4 [arg_10]
Form1.parser_NewStream @ 0x472690 | 472A0E 80 0C00 ILdI4 [arg_C]
Form1.ExtractTo @ 0x45FE38 | 45FF31 80 0C00 ILdI4 [arg_C]
262 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_80_ILdI4.
Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is the primary slot. Other slots: (3,12) ILdI4, (3,13) ILdI4, (3,17) ILdI4, (3,18) ILdI4.
Corpus: 262 occurrence(s) in PDFStreamDumper_p.exe.
(3,0x12) ILdI4, (3,0x13) ILdI4, (3,0x17) ILdI4, (3,0x18) ILdI4
Description: draft, by claude-opus-4.7. Handler 0x66105A2B, dispatch slot 0x66106F14, modOpcodes line 1159.
ILdI4
(3,0x12)not emitteddup of (0,80)handler #125Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 12 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,13) ILdI4, (3,17) ILdI4, (3,18) ILdI4.
(0,0x80) ILdI4, (3,0x13) ILdI4, (3,0x17) ILdI4, (3,0x18) ILdI4
Description: none. Handler 0x66105A2B, dispatch slot 0x6610795C, modOpcodes line 1161.
ILdI4
(3,0x13)not emitteddup of (0,80)handler #125Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 13 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,12) ILdI4, (3,17) ILdI4, (3,18) ILdI4.
(0,0x80) ILdI4, (3,0x12) ILdI4, (3,0x17) ILdI4, (3,0x18) ILdI4
Description: none. Handler 0x66105A2B, dispatch slot 0x66107960, modOpcodes line 1162.
ILdI4
(3,0x17)not emitteddup of (0,80)handler #125Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 17 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,12) ILdI4, (3,13) ILdI4, (3,18) ILdI4.
(0,0x80) ILdI4, (3,0x12) ILdI4, (3,0x13) ILdI4, (3,0x18) ILdI4
Description: none. Handler 0x66105A2B, dispatch slot 0x66107970, modOpcodes line 1163.
ILdI4
(3,0x18)not emitteddup of (0,80)handler #125Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 18 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A2B, shared by 5 dispatch slots (real opcode #125). This is a duplicate slot of (0,80) ILdI4. Other slots: (0,80) ILdI4, (3,12) ILdI4, (3,13) ILdI4, (3,17) ILdI4.
(0,0x80) ILdI4, (3,0x12) ILdI4, (3,0x13) ILdI4, (3,0x17) ILdI4
Description: none. Handler 0x66105A2B, dispatch slot 0x66107974, modOpcodes line 1164.
ILdPr
(0,0x48)emittedprimary of 2handler #71Object / COMinferred_corpus73 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):Pr]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a Pr through a runtime address.
Public Sub Main()
Dim c As New Collection
End Sub
Sub P(c As Collection)
Dim n As Long
n = c.Count
End Sub
Encoding, evidence and notes
Encoding: 48, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 48 0C00 ILdPr arg_C
Form1.parser_NewStream @ 0x472690 | 4726AA 48 0C00 ILdPr arg_C
Form1.parser_NewStream @ 0x472690 | 4726BC 48 0C00 ILdPr arg_C
Form1.parser_NewStream @ 0x472690 | 4726D1 48 0C00 ILdPr arg_C
73 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_48_ILdPr.
Handler: 0x661062F3, shared by 2 dispatch slots (real opcode #71). This is the primary slot. Other slots: (3,1B) ILdPr.
Finding: Probe: method call on a ByRef object parameter (Sub P(c As Collection): n = c.Count). ByVal object parameters are copied to a local first and use FLdPr instead. Also seen for runtime-supplied event arguments (UserDocument_AsyncReadComplete(AsyncProp As AsyncProperty)).
Corpus: 73 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661062F3, dispatch slot 0x66106E34, modOpcodes line 1173.
ILdPr
(3,0x1B)not emitteddup of (0,48)handler #71Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FD 1B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661062F3, shared by 2 dispatch slots (real opcode #71). This is a duplicate slot of (0,48) ILdPr. Other slots: (0,48) ILdPr.
Description: none. Handler 0x661062F3, dispatch slot 0x66107980, modOpcodes line 1174.
ILdR8
(0,0x81)emittedprimary of 3handler #126Currencyinferred_corpusReads a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and pushes it from the variable a ByRef argument (or other frame-held pointer) points to.
Stack: [...] -> [..., v:R8]
Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).
Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for reads of the variable a ByRef argument (or other frame-held pointer) points to when the value is a 8-byte value. The storage class selects the prefix (I); the value class selects the suffix (R8).
Public Sub Main()
Dim a As Currency
End Sub
Sub P(x As Currency)
Dim b As Currency
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 81, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 81 0C00 ILdR8 arg_C
81 0C00 ILdR8 arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_81_ILdR8.
Handler: 0x6610A388, shared by 3 dispatch slots (real opcode #126). This is the primary slot. Other slots: (3,14) ILdR8, (3,15) ILdR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Currency
End Sub
Sub P(x As Currency)
Dim b As Currency
b = x
x = b
End Sub(3,0x14) ILdR8, (3,0x15) ILdR8
Description: draft, by claude-opus-5-5. Handler 0x6610A388, dispatch slot 0x66106F18, modOpcodes line 1165.
ILdR8
(3,0x14)not emitteddup of (0,81)handler #126Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD 14 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A388, shared by 3 dispatch slots (real opcode #126). This is a duplicate slot of (0,81) ILdR8. Other slots: (0,81) ILdR8, (3,15) ILdR8.
(0,0x81) ILdR8, (3,0x15) ILdR8
Description: none. Handler 0x6610A388, dispatch slot 0x66107964, modOpcodes line 1166.
ILdR8
(3,0x15)not emitteddup of (0,81)handler #126Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD 15 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A388, shared by 3 dispatch slots (real opcode #126). This is a duplicate slot of (0,81) ILdR8. Other slots: (0,81) ILdR8, (3,14) ILdR8.
(0,0x81) ILdR8, (3,0x14) ILdR8
Description: none. Handler 0x6610A388, dispatch slot 0x66107968, modOpcodes line 1167.
ILdRf
(0,0x6C)emittedprimary of 6handler #105Stack & frameinferred_corpus2675 corpus hits[ebp+%a]; push it as a typed reference.Loads the pointer value held in a frame slot -- typically a ByRef-parameter slot whose payload is the caller-supplied address of the actual variable -- and pushes that pointer onto the stack as a typed reference, ready to be passed onward to another ByRef receiver or further dereferenced.
Stack: [...] -> [..., (*[ebp+%a]):Rf]
The I prefix marks indirection: the frame slot does not hold the value, it holds an address. Mirror of IStRf. Companion ILd{I2,I4,UI1,...} siblings perform the same indirection but immediately dereference to fetch the typed value. Without ILdRf a ByRef-to-ByRef pass-through would require an extra frame-load + dereference sequence.
Emitted when re-passing a ByRef parameter as a ByRef argument to another procedure (Sub A(ByRef x) -> Sub B(ByRef y) chain). Outside ByRef chains the typical loaders are FLdRf (address-of frame slot) and the per-type FLd{T} value loads.
Public Sub Main()
Dim a As Long, c As Long
c = CLng(a)
End Sub
Encoding, evidence and notes
Encoding: 6C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 6C 78FF ILdRf [var_88]
Form1.LoadPlugins @ 0x4644FC | 46451E 6C 64FF ILdRf [var_9C]
Form1.LoadPlugins @ 0x4644FC | 4645B9 6C 64FF ILdRf [var_9C]
Form1.LoadPlugins @ 0x4644FC | 46461B 6C 78FF ILdRf [var_88]
2675 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6C_ILdRf.
Handler: 0x66105620, shared by 6 dispatch slots (real opcode #105). This is the primary slot. Other slots: (2,E2) FLdR4, (2,E3) FLdR4, (2,E7) FLdR4, (2,E8) FLdR4, (3,1C) FLdR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2675 occurrence(s) in PDFStreamDumper_p.exe.
Sub Inner(ByRef x As Variant)
x = 42
End Sub
Sub Outer(ByRef y As Variant)
Inner y ' y's incoming pointer pushed via ILdRf
End Sub(2,0xE2) FLdR4, (2,0xE3) FLdR4, (2,0xE7) FLdR4, (2,0xE8) FLdR4, (3,0x1C) FLdR4
Description: draft, by claude-opus-4.7. Handler 0x66105620, dispatch slot 0x66106EC4, modOpcodes line 1168.
ILdRfDarg
(3,0x16)emittedhandler #478Variantinferred_corpus199 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a through a runtime address.
Public Sub Main()
Dim a As Variant
End Sub
Sub P(x As Variant)
Dim b As Variant
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: FD 16 (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %r %a
Operands:
%r: vt_type_byte, 1 byte(s). 8-bit VARTYPE code (VT_*).%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD16 0C005CFF ILdRfDarg 0xC (Variant) var_A4
Form1.DoEventsFor @ 0x44256C | 44257C FD16 0C0058FF ILdRfDarg 0xC (Variant) var_A8
Form1.SleepFor @ 0x43E7AC | 43E7B7 FD16 0C005CFF ILdRfDarg 0xC (Variant) var_A4
Form1.looksEscaped @ 0x449B64 | 449B7B FD16 0C005CFF ILdRfDarg 0xC (Variant) var_A4
199 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_16_ILdRfDarg.
Handler: 0x6610626E, unique to this slot (real opcode #478).
Corpus: 199 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610626E, dispatch slot 0x6610796C, modOpcodes line 1176.
ILdUI1
(3,0x10)emittedhandler #477Integerinferred_corpus2 corpus hitsPops an address from the stack and pushes the value of the suffix-indicated type that lives at *addr.
Stack: [..., addr:Ad] -> [..., (*addr):UI1]
Used to read through a pointer (ByRef in-arg, dereferenced pointer field).
Emitted when reading a UI1 through a runtime address.
Public Sub Main()
Dim a As Byte
End Sub
Sub P(x As Byte)
Dim b As Byte
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: FD 10 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [%a]
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD10 0C00 ILdUI1 [arg_C]
modEscapes.Proc_441F80 @ 0x441F80 | 441FAC FD10 1000 ILdUI1 [arg_10]
modEscapes.Proc_441F80 @ 0x441F80 | 441FD4 FD10 1000 ILdUI1 [arg_10]
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_10_ILdUI1.
Handler: 0x6610A36E, unique to this slot (real opcode #477).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610A36E, dispatch slot 0x66107954, modOpcodes line 1160.
I_IndirectStore
Store through pointer at stack top Prefix: I = indirect
IStAd
(3,0x28)emittedhandler #482Object / COMinferred_corpus2 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:Ad] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type Ad.
Public Sub Main()
Dim a As Object
End Sub
Sub P(x As Object)
Dim b As Object
Set b = x
Set x = b
End Sub
Encoding, evidence and notes
Encoding: FD 28 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD28 0C00 IStAd arg_C
Form1.GetActiveData @ 0x464174 | 46419C FD28 1400 IStAd arg_14
frmFilterVisualizer.Proc_445B48 @ 0x445B48 | 445BA1 FD28 1000 IStAd arg_10
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_28_IStAd.
Handler: 0x6610B393, unique to this slot (real opcode #482).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B393, dispatch slot 0x661079B4, modOpcodes line 1188.
IStAdFunc
(3,0x2F)emittedhandler #487Object / COMinferred_corpus2 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type .
Public Sub Main()
Dim c As Collection
End Sub
Sub P(x As Collection)
Set x = New Collection
Dim y As Collection
Set y = x
End Sub
Encoding, evidence and notes
Encoding: FD 2F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD2F 0C00 IStAdFunc arg_C
frmFuncGraph.GraphFrom @ 0x4691CC | 46926F FD2F 1000 IStAdFunc arg_10
frmFuncGraph.GraphTo @ 0x46771C | 4677BF FD2F 1000 IStAdFunc arg_10
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2F_IStAdFunc.
Handler: 0x661063A0, unique to this slot (real opcode #487).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661063A0, dispatch slot 0x661079D0, modOpcodes line 1198.
IStDarg
(0,0x62)emittedprimary of 2handler #95Variantconfirmed_handler39 corpus hitsAlias dispatch slot (0, 0x62) for the canonical IStDarg at (3, 0x26); semantics are identical.
Pops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type .
Public Sub Main()
End Sub
Sub P(Optional x As Variant)
Dim n As Long
n = x
x = 1
If IsMissing(x) Then n = 2
End Sub
Encoding, evidence and notes
Encoding: 62, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 62 0C00 IStDarg arg_C
Form1.looksEscaped @ 0x449B64 | 449B8D 62 0C00 IStDarg arg_C
fso.Proc_453AA8 @ 0x453AA8 | 453AFE 62 0C00 IStDarg arg_C
fso.Proc_453AA8 @ 0x453AA8 | 453B86 62 1000 IStDarg arg_10
39 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_62_IStDarg.
Handler: 0x6610B78E, shared by 2 dispatch slots (real opcode #95). This is the primary slot. Other slots: (3,26) IStDarg.
Corpus: 39 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610B78E, dispatch slot 0x66106E9C, modOpcodes line 1193.
IStDarg
(3,0x26)not emitteddup of (0,62)handler #95Variantinferred_corpusEncoding, evidence and notes
Encoding: FD 26 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B78E, shared by 2 dispatch slots (real opcode #95). This is a duplicate slot of (0,62) IStDarg. Other slots: (0,62) IStDarg.
Description: none. Handler 0x6610B78E, dispatch slot 0x661079AC, modOpcodes line 1186.
IStDargAd
(3,0x2B)emittedhandler #483Variantinferred_corpusSet a ByRef Variant parameter to an object reference (VT_DISPATCH).Pops an object pointer, AddRefs it and stores it as VT_DISPATCH into the Variant that argument %a points to.
Emitted for Set x = o inside Sub P(x As Variant).
Public Sub Main()
Dim v As Variant
End Sub
Sub P(x As Variant)
Dim o As Object, u As IUnknown
Set x = o
Set x = u
Set x = New Collection
x = o
End Sub
Encoding, evidence and notes
Encoding: FD 2B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD2B 0C00 IStDargAd arg_C
FD2B 0C00 IStDargAd arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2B_IStDargAd.
Handler: 0x6610B446, unique to this slot (real opcode #483).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant
End Sub
Sub P(x As Variant)
Dim o As Object, u As IUnknown
Set x = o
Set x = u
Set x = New Collection
x = o
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B446, dispatch slot 0x661079C0, modOpcodes line 1194.
IStDargAdFunc
(3,0x2C)emittedhandler #484Variantinferred_corpusSet a ByRef Variant parameter to an object returned by a call.As IStDargAd, but adopts the returned reference without an extra AddRef.
Emitted for Set x = New Collection / Set x = F() inside Sub P(x As Variant).
Public Sub Main()
Dim v As Variant
End Sub
Sub P(x As Variant)
Dim o As Object, u As IUnknown
Set x = o
Set x = u
Set x = New Collection
x = o
End Sub
Encoding, evidence and notes
Encoding: FD 2C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD2C 0C00 IStDargAdFunc arg_C
FD2C 0C00 IStDargAdFunc arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2C_IStDargAdFunc.
Handler: 0x6610B3FC, unique to this slot (real opcode #484).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant
End Sub
Sub P(x As Variant)
Dim o As Object, u As IUnknown
Set x = o
Set x = u
Set x = New Collection
x = o
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B3FC, dispatch slot 0x661079C4, modOpcodes line 1195.
IStDargCopy
(3,0x30)emittedhandler #488Variantinferred_corpusPops a Variant and copies it (VariantCopy semantics) into the Variant that ByRef argument %a points to, clearing the old value.
Stack: [..., v:Var] -> [...]
Emitted for x = b inside Sub P(x As Variant).
Public Sub Main()
Dim a As Variant
End Sub
Sub P(x As Variant)
Dim b As Variant
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: FD 30 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD30 0C00 IStDargCopy arg_C
FD30 0C00 IStDargCopy arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_30_IStDargCopy.
Handler: 0x6610B77E, unique to this slot (real opcode #488).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant
End Sub
Sub P(x As Variant)
Dim b As Variant
b = x
x = b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B77E, dispatch slot 0x661079D4, modOpcodes line 1199.
IStDargUnk
(3,0x2D)emittedhandler #485Variantinferred_corpusSet a ByRef Variant parameter to an IUnknown reference (VT_UNKNOWN).Pops an IUnknown pointer, AddRefs it and stores it as VT_UNKNOWN into the Variant that argument %a points to.
Emitted for Set x = u (u As IUnknown) inside Sub P(x As Variant).
Public Sub Main()
Dim v As Variant
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
Dim u As IUnknown
Set x = FU()
Set x = u
End Sub
Encoding, evidence and notes
Encoding: FD 2D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD2D 0C00 IStDargUnk arg_C
FD2D 0C00 IStDargUnk arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2D_IStDargUnk.
Handler: 0x6610B5DC, unique to this slot (real opcode #485).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
Dim u As IUnknown
Set x = FU()
Set x = u
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B5DC, dispatch slot 0x661079C8, modOpcodes line 1196.
IStDargUnkFunc
(3,0x2E)emittedhandler #486Variantinferred_corpusSet a ByRef Variant parameter to an IUnknown returned by a call.As IStDargUnk, but adopts the returned reference without an extra AddRef.
Emitted for Set x = FU() where FU returns IUnknown.
Public Sub Main()
Dim v As Variant
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
Dim u As IUnknown
Set x = FU()
Set x = u
End Sub
Encoding, evidence and notes
Encoding: FD 2E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD2E 0C00 IStDargUnkFunc arg_C
FD2E 0C00 IStDargUnkFunc arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_2E_IStDargUnkFunc.
Handler: 0x6610B56A, unique to this slot (real opcode #486).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Sub P(x As Variant)
Dim u As IUnknown
Set x = FU()
Set x = u
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B56A, dispatch slot 0x661079CC, modOpcodes line 1197.
IStFPR4
(0,0x87)emittedprimary of 2handler #132Floating pointinferred_corpusPops a Single, moved through the FPU (fld/fstp dword), and writes it to the variable a ByRef argument (or other frame-held pointer) points to.
Stack: [..., v:FPR4] -> [...]
Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).
Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.
Emitted for assignments to the variable a ByRef argument (or other frame-held pointer) points to when the value is a Single. The storage class selects the prefix (I); the value class selects the suffix (FPR4).
Public Sub Main()
Dim a As Single
End Sub
Sub P(x As Single)
Dim b As Single
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 87, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 87 0C00 IStFPR4 arg_C
87 0C00 IStFPR4 arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_87_IStFPR4.
Handler: 0x6610A407, shared by 2 dispatch slots (real opcode #132). This is the primary slot. Other slots: (3,29) IStFPR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Single
End Sub
Sub P(x As Single)
Dim b As Single
b = x
x = b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A407, dispatch slot 0x66106F30, modOpcodes line 1189.
IStFPR4
(3,0x29)not emitteddup of (0,87)handler #132Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD 29 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A407, shared by 2 dispatch slots (real opcode #132). This is a duplicate slot of (0,87) IStFPR4. Other slots: (0,87) IStFPR4.
Description: none. Handler 0x6610A407, dispatch slot 0x661079B8, modOpcodes line 1190.
IStFPR8
(0,0x88)emittedprimary of 2handler #133Floating pointinferred_corpusPops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to the variable a ByRef argument (or other frame-held pointer) points to.
Stack: [..., v:FPR8] -> [...]
Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).
Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.
Emitted for assignments to the variable a ByRef argument (or other frame-held pointer) points to when the value is a Double/Date. The storage class selects the prefix (I); the value class selects the suffix (FPR8).
Public Sub Main()
Dim a As Date
End Sub
Sub P(x As Date)
Dim b As Date
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 88, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 88 0C00 IStFPR8 arg_C
88 0C00 IStFPR8 arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_88_IStFPR8.
Handler: 0x6610A429, shared by 2 dispatch slots (real opcode #133). This is the primary slot. Other slots: (3,2A) IStFPR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Date
End Sub
Sub P(x As Date)
Dim b As Date
b = x
x = b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A429, dispatch slot 0x66106F34, modOpcodes line 1191.
IStFPR8
(3,0x2A)not emitteddup of (0,88)handler #133Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD 2A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A429, shared by 2 dispatch slots (real opcode #133). This is a duplicate slot of (0,88) IStFPR8. Other slots: (0,88) IStFPR8.
Description: none. Handler 0x6610A429, dispatch slot 0x661079BC, modOpcodes line 1192.
IStI2
(0,0x84)emittedprimary of 2handler #129Integerinferred_corpus17 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:I2] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type I2.
Public Sub Main()
Dim a As Boolean
End Sub
Sub P(x As Boolean)
Dim b As Boolean
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 84, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 84 0C00 IStI2 arg_C
fso.Proc_44ECE8 @ 0x44ECE8 | 44ED02 84 1000 IStI2 arg_10
fso.Proc_44ECE8 @ 0x44ECE8 | 44ED1C 84 1000 IStI2 arg_10
fso.Proc_44ECE8 @ 0x44ECE8 | 44ED36 84 1000 IStI2 arg_10
17 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_84_IStI2.
Handler: 0x66105A5B, shared by 2 dispatch slots (real opcode #129). This is the primary slot. Other slots: (3,21) IStI2.
Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105A5B, dispatch slot 0x66106F24, modOpcodes line 1178.
IStI2
(3,0x21)not emitteddup of (0,84)handler #129Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 21 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A5B, shared by 2 dispatch slots (real opcode #129). This is a duplicate slot of (0,84) IStI2. Other slots: (0,84) IStI2.
Description: none. Handler 0x66105A5B, dispatch slot 0x66107998, modOpcodes line 1179.
IStI4
(0,0x85)emittedprimary of 3handler #130Integerinferred_corpus6 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:I4] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type I4.
Public Sub Main()
Dim a As Long
End Sub
Sub P(x As Long)
Dim b As Long
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 85, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 85 0C00 IStI4 arg_C
fso.Proc_45D698 @ 0x45D698 | 45D74B 85 2000 IStI4 arg_20
fso.Proc_45D698 @ 0x45D698 | 45D7D1 85 2000 IStI4 arg_20
fso.Proc_45D698 @ 0x45D698 | 45D881 85 2000 IStI4 arg_20
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_85_IStI4.
Handler: 0x6610A3D4, shared by 3 dispatch slots (real opcode #130). This is the primary slot. Other slots: (3,22) IStI4, (3,23) IStI4.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
(3,0x22) IStI4, (3,0x23) IStI4
Description: draft, by claude-opus-4.7. Handler 0x6610A3D4, dispatch slot 0x66106F28, modOpcodes line 1180.
IStI4
(3,0x22)not emitteddup of (0,85)handler #130Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 22 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A3D4, shared by 3 dispatch slots (real opcode #130). This is a duplicate slot of (0,85) IStI4. Other slots: (0,85) IStI4, (3,23) IStI4.
(0,0x85) IStI4, (3,0x23) IStI4
Description: none. Handler 0x6610A3D4, dispatch slot 0x6610799C, modOpcodes line 1181.
IStI4
(3,0x23)not emitteddup of (0,85)handler #130Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD 23 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A3D4, shared by 3 dispatch slots (real opcode #130). This is a duplicate slot of (0,85) IStI4. Other slots: (0,85) IStI4, (3,22) IStI4.
(0,0x85) IStI4, (3,0x22) IStI4
Description: none. Handler 0x6610A3D4, dispatch slot 0x661079A0, modOpcodes line 1182.
IStR8
(0,0x86)emittedprimary of 3handler #131Currencyinferred_corpusPops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to the variable a ByRef argument (or other frame-held pointer) points to.
Stack: [..., v:R8] -> [...]
Operands: %a: frame slot holding the pointer (usually a ByRef argument, arg_XX).
Access to ByRef parameters: the frame slot holds the caller's address, and the value is read or written through it.
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for assignments to the variable a ByRef argument (or other frame-held pointer) points to when the value is a 8-byte value. The storage class selects the prefix (I); the value class selects the suffix (R8).
Public Sub Main()
Dim a As Currency
End Sub
Sub P(x As Currency)
Dim b As Currency
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: 86, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 86 0C00 IStR8 arg_C
86 0C00 IStR8 arg_C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_86_IStR8.
Handler: 0x6610A3EC, shared by 3 dispatch slots (real opcode #131). This is the primary slot. Other slots: (3,24) IStR8, (3,25) IStR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Currency
End Sub
Sub P(x As Currency)
Dim b As Currency
b = x
x = b
End Sub(3,0x24) IStR8, (3,0x25) IStR8
Description: draft, by claude-opus-5-5. Handler 0x6610A3EC, dispatch slot 0x66106F2C, modOpcodes line 1183.
IStR8
(3,0x24)not emitteddup of (0,86)handler #131Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD 24 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A3EC, shared by 3 dispatch slots (real opcode #131). This is a duplicate slot of (0,86) IStR8. Other slots: (0,86) IStR8, (3,25) IStR8.
(0,0x86) IStR8, (3,0x25) IStR8
Description: none. Handler 0x6610A3EC, dispatch slot 0x661079A4, modOpcodes line 1184.
IStR8
(3,0x25)not emitteddup of (0,86)handler #131Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD 25 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A3EC, shared by 3 dispatch slots (real opcode #131). This is a duplicate slot of (0,86) IStR8. Other slots: (0,86) IStR8, (3,24) IStR8.
(0,0x86) IStR8, (3,0x24) IStR8
Description: none. Handler 0x6610A3EC, dispatch slot 0x661079A8, modOpcodes line 1185.
IStStr
(3,0x27)emittedhandler #481Stringinferred_corpus6 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:Str] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type Str.
Public Sub Main()
Dim k As New CSink
End Sub
' ---- CSrc.cls
Public Event Fired(ByVal n As Long, s As String)
Public Event Simple()
Public Sub Go()
Dim s As String
RaiseEvent Fired(1, s)
RaiseEvent Simple
End Sub
' ---- CSink.cls
Private WithEvents src As CSrc
Public Sub Hook()
Set src = New CSrc
src.Go
End Sub
Private Sub src_Fired(ByVal n As Long, s As String)
s = CStr(n)
End Sub
Private Sub src_Simple()
End Sub
Encoding, evidence and notes
Encoding: FD 27 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD27 1000 IStStr arg_10
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D605 FD27 0C00 IStStr arg_C
CPdfParser.Proc_442C44 @ 0x442C44 | 442C6D FD27 1000 IStStr arg_10
CPdfParser.Proc_442C44 @ 0x442C44 | 442C9E FD27 0C00 IStStr arg_C
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_27_IStStr.
Handler: 0x66106344, unique to this slot (real opcode #481).
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106344, dispatch slot 0x661079B0, modOpcodes line 1187.
IStStrCopy
(3,0x31)emittedhandler #489Stringinferred_corpus3 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type .
Public Sub Main()
End Sub
Sub P(Optional x As Long = 3, Optional s As String = "a")
Dim n As Long, t As String
n = x
x = 1
t = s
s = "b"
End Sub
Encoding, evidence and notes
Encoding: FD 31 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD31 1000 IStStrCopy arg_10
Form1.isAS3Sorcerer_Installed @ 0x44D52C | 44D563 FD31 0C00 IStStrCopy arg_C
CSharpFilters.Decrypt @ 0x455BDC | 455D30 FD31 1000 IStStrCopy arg_10
CSharpFilters.Decrypt @ 0x455BDC | 455D52 FD31 1000 IStStrCopy arg_10
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_31_IStStrCopy.
Handler: 0x66106351, unique to this slot (real opcode #489).
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106351, dispatch slot 0x661079D8, modOpcodes line 1200.
IStUI1
(3,0x20)emittedhandler #480Integerinferred_corpus1 corpus hitsPops a value and a target address (the address is on top under the value depending on subvariant; see printf template). Writes the value at the target.
Stack: [..., addr:Ad, v:UI1] -> [...] (*addr <- v)
Used for indirect assignment via pointer (e.g. ByRef parameter writeback, pointer-style field assignment).
Emitted when writing through a runtime-computed pointer of type UI1.
Public Sub Main()
Dim a As Byte
End Sub
Sub P(x As Byte)
Dim b As Byte
b = x
x = b
End Sub
Encoding, evidence and notes
Encoding: FD 20 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FD20 0C00 IStUI1 arg_C
modEscapes.Proc_448CF0 @ 0x448CF0 | 448D62 FD20 1000 IStUI1 arg_10
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_20_IStUI1.
Handler: 0x6610A3BB, unique to this slot (real opcode #480).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610A3BB, dispatch slot 0x66107994, modOpcodes line 1177.
IStVarCopyObj
(5,0x09)not emittedhandler #735Variantinferred_corpusEncoding, evidence and notes
Encoding: FF 09 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B6FD, unique to this slot (real opcode #735).
Description: none. Handler 0x6610B6FD, dispatch slot 0x66108138, modOpcodes line 1201.
ImpAd_Call
Call external (DLL/COM API) via const pool Prefix: Imp = import, Ad = address
ImpAdCallCbFrame
(4,0x2D)emittedhandler #611UDT / recordinferred_corpusCalls the p-code procedure from the constant pool, passing the address of the frame slot %a as the hidden result buffer. Observed FE2D 6CFF 0000 0000 0800: buffer var_94, pool index 0, 8 bytes. The result is then copied out with CopyBytes or AssignRecord.
Emitted for r = F() where F returns a UDT.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TPlain
r = F()
End Sub
Private Function F() As TPlain
F.a = 1
End Function
Encoding, evidence and notes
Encoding: FE 2D (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE2D 6CFF000000000800 ImpAdCallCbFrame
FE2D 6CFF000000000800 ImpAdCallCbFrame
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_2D_ImpAdCallCbFrame.
Handler: 0x6610B972, unique to this slot (real opcode #611).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TPlain
r = F()
End Sub
Private Function F() As TPlain
F.a = 1
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B972, dispatch slot 0x66107DC8, modOpcodes line 319.
ImpAdCallCy
(0,0x0C)emittedprimary of 2handler #11Procedure call/returninferred_corpusCalls the target from the constant pool (%x) and pushes the 8-byte Currency returned in EDX:EAX. %2 is the argument byte count to clean up.
Emitted for calls to module Functions declared As Currency and API Declares returning Currency.
Public Sub Main()
Dim b As Currency
b = F()
End Sub
Function F() As Currency
F = 1.5@
End Function
Encoding, evidence and notes
Encoding: 0C, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x %2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: 0C 00000000 ImpAdCallCy modProbe.Proc_40149C 0x0
0C 00000000 ImpAdCallCy modProbe.Proc_40149C 0x0
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0C_ImpAdCallCy.
Handler: 0x6610BAEE, shared by 2 dispatch slots (real opcode #11). This is the primary slot. Other slots: (4,25) ImpAdCallCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Currency
b = F()
End Sub
Function F() As Currency
F = 1.5@
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610BAEE, dispatch slot 0x66106D44, modOpcodes line 307.
ImpAdCallCy
(4,0x25)not emitteddup of (0,0C)handler #11Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 25 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x %2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2: immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BAEE, shared by 2 dispatch slots (real opcode #11). This is a duplicate slot of (0,0C) ImpAdCallCy. Other slots: (0,0C) ImpAdCallCy.
Description: none. Handler 0x6610BAEE, dispatch slot 0x66107DA8, modOpcodes line 308.
ImpAdCallFPR4
(0,0x0A)emittedprimary of 4handler #9Procedure call/returninferred_corpus1224 corpus hitsCalls the target identified by the constant-pool operand %x with the arguments already on the stack. The argument area is cleaned up according to the callee's frame; no result is pushed from EAX.
Emitted for calls to module procedures and Declared APIs that are Subs, calls whose result is ignored, and functions returning Single/Double/Date (FPU) or Variant (hidden result buffer). Integer-class results use ImpAdCallI2 (0,0B) or ImpAdCallI4 (0,5E), Byte ImpAdCallUI1, Currency ImpAdCallCy. Despite its name, the slot is not specific to Single.
Private Declare Sub Ext Lib "x.dll" Alias "#5" ()
Public Sub Main()
Ext
End Sub
Encoding, evidence and notes
Encoding: 0A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).
Observed: 0A 00000000 ImpAdCallFPR4
Form1.LoadPlugins @ 0x4644FC | 46467B 0A 0F000C00 ImpAdCallFPR4 rtcCreateObject2
Form1.LoadPlugins @ 0x4644FC | 46472F 0A 17000800 ImpAdCallFPR4 rtcShell
Form1.LoadPlugins @ 0x4644FC | 46474F 0A 18000400 ImpAdCallFPR4 kernel32.Sleep
1224 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0A_ImpAdCallFPR4.
Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is the primary slot. Other slots: (4,29) ImpAdCallFPR4, (4,2A) ImpAdCallFPR4, (4,2C) ImpAdCallFPR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1224 occurrence(s) in PDFStreamDumper_p.exe.
Sub P(ByVal n As Long)
End Sub
Sub Main()
P 1
End Sub(4,0x29) ImpAdCallFPR4, (4,0x2A) ImpAdCallFPR4, (4,0x2C) ImpAdCallFPR4
Description: draft, by claude-opus-5-5. Handler 0x6610664E, dispatch slot 0x66106D3C, modOpcodes line 301.
ImpAdCallFPR4
(4,0x29)not emitteddup of (0,0A)handler #9Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 29 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is a duplicate slot of (0,0A) ImpAdCallFPR4. Other slots: (0,0A) ImpAdCallFPR4, (4,2A) ImpAdCallFPR4, (4,2C) ImpAdCallFPR4.
(0,0x0A) ImpAdCallFPR4, (4,0x2A) ImpAdCallFPR4, (4,0x2C) ImpAdCallFPR4
Description: none. Handler 0x6610664E, dispatch slot 0x66107DB8, modOpcodes line 302.
ImpAdCallFPR4
(4,0x2A)not emitteddup of (0,0A)handler #9Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 2A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is a duplicate slot of (0,0A) ImpAdCallFPR4. Other slots: (0,0A) ImpAdCallFPR4, (4,29) ImpAdCallFPR4, (4,2C) ImpAdCallFPR4.
(0,0x0A) ImpAdCallFPR4, (4,0x29) ImpAdCallFPR4, (4,0x2C) ImpAdCallFPR4
Description: none. Handler 0x6610664E, dispatch slot 0x66107DBC, modOpcodes line 303.
ImpAdCallFPR4
(4,0x2C)not emitteddup of (0,0A)handler #9Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 2C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610664E, shared by 4 dispatch slots (real opcode #9). This is a duplicate slot of (0,0A) ImpAdCallFPR4. Other slots: (0,0A) ImpAdCallFPR4, (4,29) ImpAdCallFPR4, (4,2A) ImpAdCallFPR4.
(0,0x0A) ImpAdCallFPR4, (4,0x29) ImpAdCallFPR4, (4,0x2A) ImpAdCallFPR4
Description: none. Handler 0x6610664E, dispatch slot 0x66107DC4, modOpcodes line 304.
ImpAdCallHresult
(0,0x09)emittedprimary of 2handler #8Procedure call/returninferred_corpusCalls the import (%x), checks the HRESULT and raises a VB error on failure. %2 is the argument byte count. Observed: ::call rtDecFromVar 0x8 for CDec(1).
Emitted for runtime helpers that return HRESULTs (Decimal conversions and similar).
Public Sub Main()
Dim v As Variant, s As String
v = CDec(1)
End Sub
Encoding, evidence and notes
Encoding: 09, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: ::call %x %2
Operands:
%x(call): pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: 09 00000800 ImpAdCallHresult ::call rtDecFromVar 0x8
09 00000800 ImpAdCallHresult ::call rtDecFromVar 0x8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_09_ImpAdCallHresult.
Handler: 0x6610B902, shared by 2 dispatch slots (real opcode #8). This is the primary slot. Other slots: (4,4F) ImpAdCallHresult.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, s As String
v = CDec(1)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B902, dispatch slot 0x66106D38, modOpcodes line 298.
ImpAdCallHresult
(4,0x4F)not emitteddup of (0,09)handler #8Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 4F (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: ::call %x %2
Operands:
%x(call): pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2: immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B902, shared by 2 dispatch slots (real opcode #8). This is a duplicate slot of (0,09) ImpAdCallHresult. Other slots: (0,09) ImpAdCallHresult.
Description: none. Handler 0x6610B902, dispatch slot 0x66107E50, modOpcodes line 299.
ImpAdCallI2
(0,0x0B)emittedprimary of 6handler #10Procedure call/returninferred_corpus689 corpus hitsCalls the target from the constant pool (%x) and pushes EAX. %2 is the byte count of arguments to drop.
Emitted for calls whose result comes back in EAX and is typed Integer, Boolean, String (BSTR pointer) or Object: user Functions, runtime functions (DoEvents, string functions returning BSTR) and Declares returning Integer/String. Long-returning calls use (0,5E), which shares this handler.
Public Sub Main()
Dim n As Long
n = DoEvents
End Sub
Encoding, evidence and notes
Encoding: 0B, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x %2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: 0B 00000000 ImpAdCallI2 rtcDoEvents 0x0
Form1.LoadPlugins @ 0x4644FC | 464528 0B 06000400 ImpAdCallI2 fso.Proc_440BCC 0x4
Form1.LoadPlugins @ 0x4644FC | 464656 0B 0D000400 ImpAdCallI2 fso.Proc_449624 0x4
Form1.LoadPlugins @ 0x4644FC | 464699 0B 10000000 ImpAdCallI2 rtcErrObj 0x0
689 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0B_ImpAdCallI2.
Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is the primary slot. Other slots: (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0B):
Dim n As Long : n = DoEvents - (0,5E):
Dim n As Long : n = GetTickCount()
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 689 occurrence(s) in PDFStreamDumper_p.exe.
Function F() As Integer
F = 1
End Function
Sub Main()
Dim n As Integer
n = F()
End Sub(0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4
Description: draft, by claude-opus-5-5. Handler 0x6610668C, dispatch slot 0x66106D40, modOpcodes line 306.
ImpAdCallI4
(0,0x5E)emitteddup of (0,0B)handler #10Procedure call/returninferred_corpus118 corpus hitsCalls the target from the constant pool (%x) and pushes EAX. addESP:%2 is the argument byte count.
Emitted for calls whose result is a Long: Declare functions As Long, user Functions As Long, and runtime functions returning Long (VarType, Seek, Erl, ...). Same handler as ImpAdCallI2 (0,0B); the slot records the Long return type.
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub Main()
Dim n As Long
n = GetTickCount()
End Sub
Encoding, evidence and notes
Encoding: 5E, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 5E 00000000 ImpAdCallI4 kernel32.GetTickCount addESP:0x0
Form1.LoadPlugins @ 0x4644FC | 4645C3 5E 0A000800 ImpAdCallI4 fso.Proc_453AA8 addESP:0x8
Form1.LoadPlugins @ 0x4644FC | 4646D2 5E 13001400 ImpAdCallI4 rtcMsgBox addESP:0x14
Form1.mnub64decode_Click @ 0x451280 | 45134A 5E 30000400 ImpAdCallI4 rtcFileLen addESP:0x4
118 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_5E_ImpAdCallI4.
Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0B):
Dim n As Long : n = DoEvents - (0,5E):
Dim n As Long : n = GetTickCount()
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 118 occurrence(s) in PDFStreamDumper_p.exe.
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub Main()
Dim n As Long
n = GetTickCount()
End Sub(0,0x0B) ImpAdCallI2, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4
Description: draft, by claude-opus-5-5. Handler 0x6610668C, dispatch slot 0x66106E8C, modOpcodes line 310.
ImpAdCallI4
(4,0x21)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 21 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0B):
Dim n As Long : n = DoEvents - (0,5E):
Dim n As Long : n = GetTickCount()
(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4
Description: none. Handler 0x6610668C, dispatch slot 0x66107D98, modOpcodes line 311.
ImpAdCallI4
(4,0x22)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 22 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,27) ImpAdCallI4, (4,28) ImpAdCallI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0B):
Dim n As Long : n = DoEvents - (0,5E):
Dim n As Long : n = GetTickCount()
(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x27) ImpAdCallI4, (4,0x28) ImpAdCallI4
Description: none. Handler 0x6610668C, dispatch slot 0x66107D9C, modOpcodes line 312.
ImpAdCallI4
(4,0x27)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 27 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,28) ImpAdCallI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0B):
Dim n As Long : n = DoEvents - (0,5E):
Dim n As Long : n = GetTickCount()
(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x28) ImpAdCallI4
Description: none. Handler 0x6610668C, dispatch slot 0x66107DB0, modOpcodes line 313.
ImpAdCallI4
(4,0x28)not emitteddup of (0,0B)handler #10Procedure call/returnconfirmed_handlerEncoding, evidence and notes
Encoding: FE 28 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610668C, shared by 6 dispatch slots (real opcode #10). This is a duplicate slot of (0,0B) ImpAdCallI2. Other slots: (0,0B) ImpAdCallI2, (0,5E) ImpAdCallI4, (4,21) ImpAdCallI4, (4,22) ImpAdCallI4, (4,27) ImpAdCallI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0B):
Dim n As Long : n = DoEvents - (0,5E):
Dim n As Long : n = GetTickCount()
(0,0x0B) ImpAdCallI2, (0,0x5E) ImpAdCallI4, (4,0x21) ImpAdCallI4, (4,0x22) ImpAdCallI4, (4,0x27) ImpAdCallI4
Description: none. Handler 0x6610668C, dispatch slot 0x66107DB4, modOpcodes line 314.
ImpAdCallNonVirt
(5,0x1E)emittedhandler #752Procedure call/returncontextual2 corpus hitsFriend procedure of a class.Calls the procedure directly rather than through the vtable, passing the object as this. Operand: pool index of the procedure; vbdec also shows the stack-check byte count (espCheck).
Emitted for calls to Friend methods (o.FrFn()), which are not part of the COM interface.
Public Sub Main()
Dim o As CThing, b As Boolean
b = o.FrFn()
End Sub
' ---- CThing.cls
Public pub As Boolean
Private m As Boolean
Private ma(3) As Boolean
Public Sub Work()
Dim b As Boolean, i As Long
m = b
b = m
pub = b
b = pub
i = 1
ma(i) = b
b = ma(i)
b = Me.Prop
Me.pub = b
b = Fn()
Sb
Me.Sb
End Sub
Public Property Get Prop() As Boolean
Prop = m
End Property
Public Property Let Prop(v As Boolean)
m = v
End Property
Public Function Fn() As Boolean
Fn = m
End Function
Private Function PFn() As Boolean
PFn = m
End Function
Public Sub Sb()
Dim b As Boolean
b = PFn()
End Sub
Friend Function FrFn() As Boolean
FrFn = m
End Function
Encoding, evidence and notes
Encoding: FF 1E (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF1E 00000800 ImpAdCallNonVirt CThing.Proc_401944 espCheck: 8
FF1E 00000800 ImpAdCallNonVirt CThing.Proc_401944 espCheck: 8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_1E_ImpAdCallNonVirt.
Handler: 0x6610B8FA, unique to this slot (real opcode #752).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Public Sub Main()
Dim o As CThing, b As Boolean
b = o.FrFn()
End Sub
' ---- CThing.cls
Public pub As Boolean
Private m As Boolean
Private ma(3) As Boolean
Public Sub Work()
Dim b As Boolean, i As Long
m = b
b = m
pub = b
b = pub
i = 1
ma(i) = b
b = ma(i)
b = Me.Prop
Me.pub = b
b = Fn()
Sb
Me.Sb
End Sub
Public Property Get Prop() As Boolean
Prop = m
End Property
Public Property Let Prop(v As Boolean)
m = v
End Property
Public Function Fn() As Boolean
Fn = m
End Function
Private Function PFn() As Boolean
PFn = m
End Function
Public Sub Sb()
Dim b As Boolean
b = PFn()
End Sub
Friend Function FrFn() As Boolean
FrFn = m
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B8FA, dispatch slot 0x6610818C, modOpcodes line 320.
ImpAdCallR4
(4,0x23)not emittedhandler #609Procedure call/returninferred_corpusEncoding, evidence and notes
Encoding: FE 23 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BA26, unique to this slot (real opcode #609).
Description: none. Handler 0x6610BA26, dispatch slot 0x66107DA0, modOpcodes line 316.
ImpAdCallR8
(4,0x24)not emittedhandler #610Procedure call/returninferred_corpusEncoding, evidence and notes
Encoding: FE 24 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BA88, unique to this slot (real opcode #610).
Description: none. Handler 0x6610BA88, dispatch slot 0x66107DA4, modOpcodes line 317.
ImpAdCallUI1
(4,0x20)emittedhandler #608Procedure call/returninferred_corpusCalls the import (%x) and pushes the Byte returned in AL. addESP:%2 is the argument byte count.
Observed: rtcByteValueBstr for AscB(s). Emitted for imports or Declares returning Byte.
Public Sub Main()
Dim s As String, r As Variant
r = AscB(s)
End Sub
Encoding, evidence and notes
Encoding: FE 20 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %x addESP:%2
Operands:
%x: pool_external_api, 2 byte(s). 16-bit constant-pool index of the callee (Declare'd API, runtime export, or p-code procedure stub).%2(addESP): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FE20 00000400 ImpAdCallUI1 rtcByteValueBstr addESP:0x4
FE20 00000400 ImpAdCallUI1 rtcByteValueBstr addESP:0x4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_20_ImpAdCallUI1.
Handler: 0x6610BB6F, unique to this slot (real opcode #608).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim s As String, r As Variant
r = AscB(s)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610BB6F, dispatch slot 0x66107D94, modOpcodes line 318.
ImpAd_Load
Load via imported address (const pool) Prefix: Imp = import, Ad = address
ImpAdLdCy
(0,0x77)emittedprimary of 3handler #116Currencyinferred_corpusReads a Currency (scaled 64-bit integer), and pushes it from a module-level (global) variable.
Stack: [...] -> [..., v:Cy]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for reads of a module-level (global) variable when the value is a Currency. The storage class selects the prefix (ImpAd); the value class selects the suffix (Cy).
Public Sub Main()
Dim b As Currency
b = modG.g
End Sub
' ---- modG.bas
Public g As Currency
Encoding, evidence and notes
Encoding: 77, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 77 0000 ImpAdLdCy global_402018
77 0000 ImpAdLdCy global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_77_ImpAdLdCy.
Handler: 0x6610A717, shared by 3 dispatch slots (real opcode #116). This is the primary slot. Other slots: (3,A4) ImpAdLdCy, (3,A5) ImpAdLdCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Currency
b = modG.g
End Sub
' ---- modG.bas
Public g As Currency(3,0xA4) ImpAdLdCy, (3,0xA5) ImpAdLdCy
Description: draft, by claude-opus-5-5. Handler 0x6610A717, dispatch slot 0x66106EF0, modOpcodes line 1207.
ImpAdLdCy
(3,0xA4)not emitteddup of (0,77)handler #116Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD A4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A717, shared by 3 dispatch slots (real opcode #116). This is a duplicate slot of (0,77) ImpAdLdCy. Other slots: (0,77) ImpAdLdCy, (3,A5) ImpAdLdCy.
(0,0x77) ImpAdLdCy, (3,0xA5) ImpAdLdCy
Description: none. Handler 0x6610A717, dispatch slot 0x66107BA4, modOpcodes line 1219.
ImpAdLdCy
(3,0xA5)not emitteddup of (0,77)handler #116Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD A5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A717, shared by 3 dispatch slots (real opcode #116). This is a duplicate slot of (0,77) ImpAdLdCy. Other slots: (0,77) ImpAdLdCy, (3,A4) ImpAdLdCy.
(0,0x77) ImpAdLdCy, (3,0xA4) ImpAdLdCy
Description: none. Handler 0x6610A717, dispatch slot 0x66107BA8, modOpcodes line 1220.
ImpAdLdFPR4
(0,0x78)emittedprimary of 2handler #117Floating pointinferred_corpusReads a Single, moved through the FPU (fld/fstp dword), and pushes it from a module-level (global) variable.
Stack: [...] -> [..., v:FPR4]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for reads of a module-level (global) variable when the value is a Single. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR4).
Public Sub Main()
Dim b As Single
b = modG.g
End Sub
' ---- modG.bas
Public g As Single
Encoding, evidence and notes
Encoding: 78, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 78 0000 ImpAdLdFPR4 global_402018
78 0000 ImpAdLdFPR4 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_78_ImpAdLdFPR4.
Handler: 0x6610A734, shared by 2 dispatch slots (real opcode #117). This is the primary slot. Other slots: (3,A9) ImpAdLdFPR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Single
b = modG.g
End Sub
' ---- modG.bas
Public g As SingleDescription: draft, by claude-opus-5-5. Handler 0x6610A734, dispatch slot 0x66106EF4, modOpcodes line 1208.
ImpAdLdFPR4
(3,0xA9)not emitteddup of (0,78)handler #117Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD A9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A734, shared by 2 dispatch slots (real opcode #117). This is a duplicate slot of (0,78) ImpAdLdFPR4. Other slots: (0,78) ImpAdLdFPR4.
Description: none. Handler 0x6610A734, dispatch slot 0x66107BB8, modOpcodes line 1224.
ImpAdLdFPR8
(0,0x79)emittedprimary of 2handler #118Floating pointinferred_corpusReads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from a module-level (global) variable.
Stack: [...] -> [..., v:FPR8]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for reads of a module-level (global) variable when the value is a Double/Date. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR8).
Public Sub Main()
Dim b As Date
b = modG.g
End Sub
' ---- modG.bas
Public g As Date
Encoding, evidence and notes
Encoding: 79, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 79 0000 ImpAdLdFPR8 global_402018
79 0000 ImpAdLdFPR8 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_79_ImpAdLdFPR8.
Handler: 0x6610A74E, shared by 2 dispatch slots (real opcode #118). This is the primary slot. Other slots: (3,AA) ImpAdLdFPR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Date
b = modG.g
End Sub
' ---- modG.bas
Public g As DateDescription: draft, by claude-opus-5-5. Handler 0x6610A74E, dispatch slot 0x66106EF8, modOpcodes line 1209.
ImpAdLdFPR8
(3,0xAA)not emitteddup of (0,79)handler #118Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD AA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A74E, shared by 2 dispatch slots (real opcode #118). This is a duplicate slot of (0,79) ImpAdLdFPR8. Other slots: (0,79) ImpAdLdFPR8.
Description: none. Handler 0x6610A74E, dispatch slot 0x66107BBC, modOpcodes line 1225.
ImpAdLdI2
(0,0x75)emittedprimary of 2handler #114Integerinferred_corpusReads a 16-bit value (Integer or Boolean), and pushes it from a module-level (global) variable.
Stack: [...] -> [..., v:I2]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for reads of a module-level (global) variable when the value is a Integer/Boolean. The storage class selects the prefix (ImpAd); the value class selects the suffix (I2).
Public Sub Main()
Dim b As Boolean
b = modG.g
End Sub
' ---- modG.bas
Public g As Boolean
Encoding, evidence and notes
Encoding: 75, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 75 0000 ImpAdLdI2 global_402018
75 0000 ImpAdLdI2 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_75_ImpAdLdI2.
Handler: 0x66105A75, shared by 2 dispatch slots (real opcode #114). This is the primary slot. Other slots: (3,A1) ImpAdLdI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Boolean
b = modG.g
End Sub
' ---- modG.bas
Public g As BooleanDescription: draft, by claude-opus-5-5. Handler 0x66105A75, dispatch slot 0x66106EE8, modOpcodes line 1205.
ImpAdLdI2
(3,0xA1)not emitteddup of (0,75)handler #114Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD A1 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A75, shared by 2 dispatch slots (real opcode #114). This is a duplicate slot of (0,75) ImpAdLdI2. Other slots: (0,75) ImpAdLdI2.
Description: none. Handler 0x66105A75, dispatch slot 0x66107B98, modOpcodes line 1216.
ImpAdLdI4
(0,0x76)emittedprimary of 5handler #115Integerinferred_corpusReads a 32-bit value, and pushes it from a module-level (global) variable.
Stack: [...] -> [..., v:I4]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for reads of a module-level (global) variable when the value is a Long. The storage class selects the prefix (ImpAd); the value class selects the suffix (I4).
Public Sub Main()
Dim b As Long
b = modG.g
End Sub
' ---- modG.bas
Public g As Long
Encoding, evidence and notes
Encoding: 76, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%c]
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 76 0000 ImpAdLdI4 [global_402018]
76 0000 ImpAdLdI4 [global_402018]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_76_ImpAdLdI4.
Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is the primary slot. Other slots: (3,A2) ImpAdLdStr, (3,A3) ImpAdLdStr, (3,A7) ImpAdLdStr, (3,A8) ImpAdLdStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Long
b = modG.g
End Sub
' ---- modG.bas
Public g As Long(3,0xA2) ImpAdLdStr, (3,0xA3) ImpAdLdStr, (3,0xA7) ImpAdLdStr, (3,0xA8) ImpAdLdStr
Description: draft, by claude-opus-5-5. Handler 0x66105A91, dispatch slot 0x66106EEC, modOpcodes line 1206.
ImpAdLdPr
(0,0x22)not emittedprimary of 2handler #33Object / COMinferred_corpusEncoding, evidence and notes
Encoding: 22, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [%c]
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B238, shared by 2 dispatch slots (real opcode #33). This is the primary slot. Other slots: (3,AB) ImpAdLdPr.
Description: none. Handler 0x6610B238, dispatch slot 0x66106D9C, modOpcodes line 1203.
ImpAdLdPr
(3,0xAB)not emitteddup of (0,22)handler #33Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FD AB (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B238, shared by 2 dispatch slots (real opcode #33). This is a duplicate slot of (0,22) ImpAdLdPr. Other slots: (0,22) ImpAdLdPr.
Description: none. Handler 0x6610B238, dispatch slot 0x66107BC0, modOpcodes line 1226.
ImpAdLdRf
(0,0x05)emittedprimary of 3handler #4Stack & frameinferred_corpus272 corpus hitsImpAdLdRf).Reads a value (typed by suffix) through a runtime address resolved from the const pool. Used to access globals exported by Declared libraries and module-level externals.
Emitted for reads of Declared external data or compiler-generated runtime statics.
Public Sub Main()
Dim n As Long
n = F(AddressOf CB)
End Sub
Function F(ByVal x As Long) As Long
F = x
End Function
Sub CB()
End Sub
Encoding, evidence and notes
Encoding: 05, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 05 0000 ImpAdLdRf modProbe.Proc_401474
Form1.LoadPlugins @ 0x4644FC | 46450B 05 0100 ImpAdLdRf global_47D11C
Form1.LoadPlugins @ 0x4644FC | 46459B 05 0100 ImpAdLdRf global_47D11C
Form1.LoadPlugins @ 0x4644FC | 4646F3 05 0100 ImpAdLdRf global_47D11C
272 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_05_ImpAdLdRf.
Handler: 0x66105AAB, shared by 3 dispatch slots (real opcode #4). This is the primary slot. Other slots: (3,A6) ImpAdLdRf, (3,AC) ImpAdLdRf.
Corpus: 272 occurrence(s) in PDFStreamDumper_p.exe.
(3,0xA6) ImpAdLdRf, (3,0xAC) ImpAdLdRf
Description: draft, by claude-opus-4.7. Handler 0x66105AAB, dispatch slot 0x66106D28, modOpcodes line 1204.
ImpAdLdRf
(3,0xA6)not emitteddup of (0,05)handler #4Stack & frameconfirmed_handlerImpAdLdRf).Encoding, evidence and notes
Encoding: FD A6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105AAB, shared by 3 dispatch slots (real opcode #4). This is a duplicate slot of (0,05) ImpAdLdRf. Other slots: (0,05) ImpAdLdRf, (3,AC) ImpAdLdRf.
(0,0x05) ImpAdLdRf, (3,0xAC) ImpAdLdRf
Description: none. Handler 0x66105AAB, dispatch slot 0x66107BAC, modOpcodes line 1221.
ImpAdLdRf
(3,0xAC)not emitteddup of (0,05)handler #4Stack & frameconfirmed_handlerImpAdLdRf).Encoding, evidence and notes
Encoding: FD AC (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105AAB, shared by 3 dispatch slots (real opcode #4). This is a duplicate slot of (0,05) ImpAdLdRf. Other slots: (0,05) ImpAdLdRf, (3,A6) ImpAdLdRf.
(0,0x05) ImpAdLdRf, (3,0xA6) ImpAdLdRf
Description: none. Handler 0x66105AAB, dispatch slot 0x66107BC4, modOpcodes line 1227.
ImpAdLdStr
(3,0xA2)not emitteddup of (0,76)handler #115Stringinferred_corpusEncoding, evidence and notes
Encoding: FD A2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A3) ImpAdLdStr, (3,A7) ImpAdLdStr, (3,A8) ImpAdLdStr.
(0,0x76) ImpAdLdI4, (3,0xA3) ImpAdLdStr, (3,0xA7) ImpAdLdStr, (3,0xA8) ImpAdLdStr
Description: none. Handler 0x66105A91, dispatch slot 0x66107B9C, modOpcodes line 1217.
ImpAdLdStr
(3,0xA3)not emitteddup of (0,76)handler #115Stringconfirmed_handlerEncoding, evidence and notes
Encoding: FD A3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A2) ImpAdLdStr, (3,A7) ImpAdLdStr, (3,A8) ImpAdLdStr.
(0,0x76) ImpAdLdI4, (3,0xA2) ImpAdLdStr, (3,0xA7) ImpAdLdStr, (3,0xA8) ImpAdLdStr
Description: none. Handler 0x66105A91, dispatch slot 0x66107BA0, modOpcodes line 1218.
ImpAdLdStr
(3,0xA7)not emitteddup of (0,76)handler #115Stringconfirmed_handlerEncoding, evidence and notes
Encoding: FD A7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A2) ImpAdLdStr, (3,A3) ImpAdLdStr, (3,A8) ImpAdLdStr.
(0,0x76) ImpAdLdI4, (3,0xA2) ImpAdLdStr, (3,0xA3) ImpAdLdStr, (3,0xA8) ImpAdLdStr
Description: none. Handler 0x66105A91, dispatch slot 0x66107BB0, modOpcodes line 1222.
ImpAdLdStr
(3,0xA8)not emitteddup of (0,76)handler #115Stringconfirmed_handlerEncoding, evidence and notes
Encoding: FD A8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105A91, shared by 5 dispatch slots (real opcode #115). This is a duplicate slot of (0,76) ImpAdLdI4. Other slots: (0,76) ImpAdLdI4, (3,A2) ImpAdLdStr, (3,A3) ImpAdLdStr, (3,A7) ImpAdLdStr.
(0,0x76) ImpAdLdI4, (3,0xA2) ImpAdLdStr, (3,0xA3) ImpAdLdStr, (3,0xA7) ImpAdLdStr
Description: none. Handler 0x66105A91, dispatch slot 0x66107BB4, modOpcodes line 1223.
ImpAdLdUI1
(3,0xA0)emittedhandler #553Integerinferred_corpusReads a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and pushes it from a module-level (global) variable.
Stack: [...] -> [..., v:UI1]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for reads of a module-level (global) variable when the value is a Byte. The storage class selects the prefix (ImpAd); the value class selects the suffix (UI1).
Public Sub Main()
Dim b As Byte
b = modG.g
End Sub
' ---- modG.bas
Public g As Byte
Encoding, evidence and notes
Encoding: FD A0 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDA0 0000 ImpAdLdUI1 global_402018
FDA0 0000 ImpAdLdUI1 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_A0_ImpAdLdUI1.
Handler: 0x6610A6FB, unique to this slot (real opcode #553).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim b As Byte
b = modG.g
End Sub
' ---- modG.bas
Public g As ByteDescription: draft, by claude-opus-5-5. Handler 0x6610A6FB, dispatch slot 0x66107B94, modOpcodes line 1215.
ImpAdLdVar
(3,0xAD)not emittedhandler #554Variantinferred_corpusEncoding, evidence and notes
Encoding: FD AD (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B16B, unique to this slot (real opcode #554).
Description: none. Handler 0x6610B16B, dispatch slot 0x66107BC8, modOpcodes line 1228.
ImpAd_Store
Store via imported address Prefix: Imp = import, Ad = address
ImpAdStAd
(3,0xB8)emittedhandler #558Object / COMinferred_corpusPops an object pointer (Set). The destination's old reference is Released and the new one is AddRef'd, and writes it to a module-level (global) variable.
Stack: [..., v:Ad] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a object reference. The storage class selects the prefix (ImpAd); the value class selects the suffix (Ad).
Public Sub Main()
Dim o As Object
Set modG.go = o
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding: FD B8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDB8 0000 ImpAdStAd global_402018
FDB8 0000 ImpAdStAd global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B8_ImpAdStAd.
Handler: 0x6610B3D4, unique to this slot (real opcode #558).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
Set modG.go = o
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B3D4, dispatch slot 0x66107BF4, modOpcodes line 1237.
ImpAdStAdFunc
(3,0xBF)emittedhandler #563Object / COMinferred_corpus1 corpus hitsImpAdStAdFunc).Writes a value (typed by suffix) to an external/imported address resolved from the const pool.
Emitted at writes to Declared external data or runtime statics.
Public Sub Main()
Set modG.g = New Collection
Dim b As Object
End Sub
' ---- modG.bas
Public g As Object
Encoding, evidence and notes
Encoding: FD BF (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDBF 0100 ImpAdStAdFunc global_402018
CScriptFunctions.RefreshObjBrowserData @ 0x4440A8 | 44410B FDBF 1B00 ImpAdStAdFunc global_47C008
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BF_ImpAdStAdFunc.
Handler: 0x6610640E, unique to this slot (real opcode #563).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610640E, dispatch slot 0x66107C10, modOpcodes line 1244.
ImpAdStCy
(0,0x7C)emittedprimary of 3handler #121Currencyinferred_corpusPops a Currency (scaled 64-bit integer), and writes it to a module-level (global) variable.
Stack: [..., v:Cy] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Currency. The storage class selects the prefix (ImpAd); the value class selects the suffix (Cy).
Public Sub Main()
modG.g = 1.5@
Dim b As Currency
End Sub
' ---- modG.bas
Public g As Currency
Encoding, evidence and notes
Encoding: 7C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 7C 0000 ImpAdStCy global_402018
7C 0000 ImpAdStCy global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7C_ImpAdStCy.
Handler: 0x6610A79D, shared by 3 dispatch slots (real opcode #121). This is the primary slot. Other slots: (3,B4) ImpAdStR8, (3,B5) ImpAdStR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = 1.5@
Dim b As Currency
End Sub
' ---- modG.bas
Public g As Currency(3,0xB4) ImpAdStR8, (3,0xB5) ImpAdStR8
Description: draft, by claude-opus-5-5. Handler 0x6610A79D, dispatch slot 0x66106F04, modOpcodes line 1212.
ImpAdStFPR4
(0,0x7D)emittedprimary of 2handler #122Floating pointinferred_corpusPops a Single, moved through the FPU (fld/fstp dword), and writes it to a module-level (global) variable.
Stack: [..., v:FPR4] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Single. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR4).
Public Sub Main()
modG.g = 1.5!
Dim b As Single
End Sub
' ---- modG.bas
Public g As Single
Encoding, evidence and notes
Encoding: 7D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 7D 0000 ImpAdStFPR4 global_402018
7D 0000 ImpAdStFPR4 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7D_ImpAdStFPR4.
Handler: 0x6610A7BA, shared by 2 dispatch slots (real opcode #122). This is the primary slot. Other slots: (3,B9) ImpAdStFPR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = 1.5!
Dim b As Single
End Sub
' ---- modG.bas
Public g As SingleDescription: draft, by claude-opus-5-5. Handler 0x6610A7BA, dispatch slot 0x66106F08, modOpcodes line 1213.
ImpAdStFPR4
(3,0xB9)not emitteddup of (0,7D)handler #122Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD B9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A7BA, shared by 2 dispatch slots (real opcode #122). This is a duplicate slot of (0,7D) ImpAdStFPR4. Other slots: (0,7D) ImpAdStFPR4.
Description: none. Handler 0x6610A7BA, dispatch slot 0x66107BF8, modOpcodes line 1238.
ImpAdStFPR8
(0,0x7E)emittedprimary of 2handler #123Floating pointinferred_corpusPops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to a module-level (global) variable.
Stack: [..., v:FPR8] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Double/Date. The storage class selects the prefix (ImpAd); the value class selects the suffix (FPR8).
Public Sub Main()
modG.g = #1/1/2000#
Dim b As Date
End Sub
' ---- modG.bas
Public g As Date
Encoding, evidence and notes
Encoding: 7E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 7E 0000 ImpAdStFPR8 global_402018
7E 0000 ImpAdStFPR8 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7E_ImpAdStFPR8.
Handler: 0x6610A7DE, shared by 2 dispatch slots (real opcode #123). This is the primary slot. Other slots: (3,BA) ImpAdStFPR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = #1/1/2000#
Dim b As Date
End Sub
' ---- modG.bas
Public g As DateDescription: draft, by claude-opus-5-5. Handler 0x6610A7DE, dispatch slot 0x66106F0C, modOpcodes line 1214.
ImpAdStFPR8
(3,0xBA)not emitteddup of (0,7E)handler #123Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FD BA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A7DE, shared by 2 dispatch slots (real opcode #123). This is a duplicate slot of (0,7E) ImpAdStFPR8. Other slots: (0,7E) ImpAdStFPR8.
Description: none. Handler 0x6610A7DE, dispatch slot 0x66107BFC, modOpcodes line 1239.
ImpAdStI2
(0,0x7A)emittedprimary of 2handler #119Integerinferred_corpusPops a 16-bit value (Integer or Boolean), and writes it to a module-level (global) variable.
Stack: [..., v:I2] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Integer/Boolean. The storage class selects the prefix (ImpAd); the value class selects the suffix (I2).
Public Sub Main()
modG.g = True
Dim b As Boolean
End Sub
' ---- modG.bas
Public g As Boolean
Encoding, evidence and notes
Encoding: 7A, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 7A 0000 ImpAdStI2 global_402018
7A 0000 ImpAdStI2 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7A_ImpAdStI2.
Handler: 0x66105AC4, shared by 2 dispatch slots (real opcode #119). This is the primary slot. Other slots: (3,B1) ImpAdStI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = True
Dim b As Boolean
End Sub
' ---- modG.bas
Public g As BooleanDescription: draft, by claude-opus-5-5. Handler 0x66105AC4, dispatch slot 0x66106EFC, modOpcodes line 1210.
ImpAdStI2
(3,0xB1)not emitteddup of (0,7A)handler #119Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD B1 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105AC4, shared by 2 dispatch slots (real opcode #119). This is a duplicate slot of (0,7A) ImpAdStI2. Other slots: (0,7A) ImpAdStI2.
Description: none. Handler 0x66105AC4, dispatch slot 0x66107BD8, modOpcodes line 1230.
ImpAdStR4
(0,0x7B)emittedprimary of 3handler #120Integerinferred_corpusPops a raw 32-bit value (in practice a Long; Single values use the FPR4 forms), and writes it to a module-level (global) variable.
Stack: [..., v:R4] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
The R4 suffix denotes a raw 4-byte move, not a floating-point type. Phase 4 probes show it used for Long values. Single/Double values use the FPR4/FPR8 forms.
Emitted for assignments to a module-level (global) variable when the value is a 4-byte value. The storage class selects the prefix (ImpAd); the value class selects the suffix (R4).
Public Sub Main()
modG.g = 70000
Dim b As Long
End Sub
' ---- modG.bas
Public g As Long
Encoding, evidence and notes
Encoding: 7B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 7B 0000 ImpAdStR4 global_402018
7B 0000 ImpAdStR4 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_7B_ImpAdStR4.
Handler: 0x6610A783, shared by 3 dispatch slots (real opcode #120). This is the primary slot. Other slots: (3,B2) ImpAdStR4, (3,B3) ImpAdStR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = 70000
Dim b As Long
End Sub
' ---- modG.bas
Public g As Long(3,0xB2) ImpAdStR4, (3,0xB3) ImpAdStR4
Description: draft, by claude-opus-5-5. Handler 0x6610A783, dispatch slot 0x66106F00, modOpcodes line 1211.
ImpAdStR4
(3,0xB2)not emitteddup of (0,7B)handler #120Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD B2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A783, shared by 3 dispatch slots (real opcode #120). This is a duplicate slot of (0,7B) ImpAdStR4. Other slots: (0,7B) ImpAdStR4, (3,B3) ImpAdStR4.
(0,0x7B) ImpAdStR4, (3,0xB3) ImpAdStR4
Description: none. Handler 0x6610A783, dispatch slot 0x66107BDC, modOpcodes line 1231.
ImpAdStR4
(3,0xB3)not emitteddup of (0,7B)handler #120Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FD B3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A783, shared by 3 dispatch slots (real opcode #120). This is a duplicate slot of (0,7B) ImpAdStR4. Other slots: (0,7B) ImpAdStR4, (3,B2) ImpAdStR4.
(0,0x7B) ImpAdStR4, (3,0xB2) ImpAdStR4
Description: none. Handler 0x6610A783, dispatch slot 0x66107BE0, modOpcodes line 1232.
ImpAdStR8
(3,0xB4)not emitteddup of (0,7C)handler #121Currencyinferred_corpusEncoding, evidence and notes
Encoding: FD B4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A79D, shared by 3 dispatch slots (real opcode #121). This is a duplicate slot of (0,7C) ImpAdStCy. Other slots: (0,7C) ImpAdStCy, (3,B5) ImpAdStR8.
(0,0x7C) ImpAdStCy, (3,0xB5) ImpAdStR8
Description: none. Handler 0x6610A79D, dispatch slot 0x66107BE4, modOpcodes line 1233.
ImpAdStR8
(3,0xB5)not emitteddup of (0,7C)handler #121Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FD B5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A79D, shared by 3 dispatch slots (real opcode #121). This is a duplicate slot of (0,7C) ImpAdStCy. Other slots: (0,7C) ImpAdStCy, (3,B4) ImpAdStR8.
(0,0x7C) ImpAdStCy, (3,0xB4) ImpAdStR8
Description: none. Handler 0x6610A79D, dispatch slot 0x66107BE8, modOpcodes line 1234.
ImpAdStStr
(3,0xB7)emittedhandler #557Stringinferred_corpusPops a String (BSTR pointer); ownership of the BSTR is transferred and the old value is freed, and writes it to a module-level (global) variable.
Stack: [..., v:Str] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a String. The storage class selects the prefix (ImpAd); the value class selects the suffix (Str).
Private Type TR
s As String
v As Variant
End Type
Dim gs As String, gr As TR
Public Sub Main()
Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
modG.ps = F()
End Sub
Function F() As String
End Function
' ---- modG.bas
Public ps As String
Encoding, evidence and notes
Encoding: FD B7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDB7 0100 ImpAdStStr global_40202C
FDB7 0100 ImpAdStStr global_40202C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B7_ImpAdStStr.
Handler: 0x6610B2E1, unique to this slot (real opcode #557).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TR
s As String
v As Variant
End Type
Dim gs As String, gr As TR
Public Sub Main()
Dim s As String, v As Variant, a(3) As String, r As TR, i As Long
modG.ps = F()
End Sub
Function F() As String
End Function
' ---- modG.bas
Public ps As StringDescription: draft, by claude-opus-5-5. Handler 0x6610B2E1, dispatch slot 0x66107BF0, modOpcodes line 1236.
ImpAdStStrCopy
(3,0xC1)emittedhandler #565Stringinferred_corpusPops a String. A private copy of the BSTR is made (SysAllocString) and the old value is freed, and writes it to a module-level (global) variable.
Stack: [..., v:Str] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a String (copied). The storage class selects the prefix (ImpAd); the value class selects the suffix (StrCopy).
Public Sub Main()
modG.g = "abc"
Dim b As String
End Sub
' ---- modG.bas
Public g As String
Encoding, evidence and notes
Encoding: FD C1 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDC1 0100 ImpAdStStrCopy global_402018
FDC1 0100 ImpAdStStrCopy global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C1_ImpAdStStrCopy.
Handler: 0x6610B2F3, unique to this slot (real opcode #565).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = "abc"
Dim b As String
End Sub
' ---- modG.bas
Public g As StringDescription: draft, by claude-opus-5-5. Handler 0x6610B2F3, dispatch slot 0x66107C18, modOpcodes line 1246.
ImpAdStUI1
(3,0xB0)emittedhandler #555Integerinferred_corpusPops a Byte (stored as 1 byte, carried on the stack widened to 16/32 bits), and writes it to a module-level (global) variable.
Stack: [..., v:UI1] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Byte. The storage class selects the prefix (ImpAd); the value class selects the suffix (UI1).
Public Sub Main()
modG.g = 7
Dim b As Byte
End Sub
' ---- modG.bas
Public g As Byte
Encoding, evidence and notes
Encoding: FD B0 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDB0 0000 ImpAdStUI1 global_402018
FDB0 0000 ImpAdStUI1 global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B0_ImpAdStUI1.
Handler: 0x6610A768, unique to this slot (real opcode #555).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = 7
Dim b As Byte
End Sub
' ---- modG.bas
Public g As ByteDescription: draft, by claude-opus-5-5. Handler 0x6610A768, dispatch slot 0x66107BD4, modOpcodes line 1229.
ImpAdStVar
(3,0xB6)emittedhandler #556Variantinferred_corpusPops a Variant (16 bytes); the source Variant is moved and the old destination value is cleared, and writes it to a module-level (global) variable.
Stack: [..., v:Var] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (Var).
Public Sub Main()
modG.g = 5
Dim b As Variant
End Sub
' ---- modG.bas
Public g As Variant
Encoding, evidence and notes
Encoding: FD B6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDB6 0000 ImpAdStVar global_402018
FDB6 0000 ImpAdStVar global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_B6_ImpAdStVar.
Handler: 0x6610B71A, unique to this slot (real opcode #556).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
modG.g = 5
Dim b As Variant
End Sub
' ---- modG.bas
Public g As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B71A, dispatch slot 0x66107BEC, modOpcodes line 1235.
ImpAdStVarAd
(3,0xBB)emittedhandler #559Variantinferred_corpusPops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a module-level (global) variable.
Stack: [..., v:Var] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a object into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarAd).
Public Sub Main()
Dim o As Object
Set modG.gv = o
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding: FD BB (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDBB 0000 ImpAdStVarAd global_402020
FDBB 0000 ImpAdStVarAd global_402020
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BB_ImpAdStVarAd.
Handler: 0x6610B4CB, unique to this slot (real opcode #559).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
Set modG.gv = o
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B4CB, dispatch slot 0x66107C00, modOpcodes line 1240.
ImpAdStVarAdFunc
(3,0xBC)emittedhandler #560Variantinferred_corpusPops an object pointer returned by a call, stored into a Variant as VT_DISPATCH and adopted without an extra AddRef, and writes it to a module-level (global) variable.
Stack: [..., v:Var] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a object from a call into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarAdFunc).
Public Sub Main()
Dim o As Object
Set modG.gv = F()
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding: FD BC (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDBC 0100 ImpAdStVarAdFunc global_402020
FDBC 0100 ImpAdStVarAdFunc global_402020
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BC_ImpAdStVarAdFunc.
Handler: 0x6610B4B5, unique to this slot (real opcode #560).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
Set modG.gv = F()
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B4B5, dispatch slot 0x66107C04, modOpcodes line 1241.
ImpAdStVarCopy
(3,0xC0)emittedhandler #564Variantinferred_corpusPops a Variant, deep-copied with VariantCopy semantics; the old destination value is cleared, and writes it to a module-level (global) variable.
Stack: [..., v:Var] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a Variant (copied). The storage class selects the prefix (ImpAd); the value class selects the suffix (VarCopy).
Public Sub Main()
Dim o As Object
modG.gv = o
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As Variant
Encoding, evidence and notes
Encoding: FD C0 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDC0 0000 ImpAdStVarCopy global_402020
FDC0 0000 ImpAdStVarCopy global_402020
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C0_ImpAdStVarCopy.
Handler: 0x6610B6D5, unique to this slot (real opcode #564).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
modG.gv = o
End Sub
Function F() As Object
End Function
' ---- modG.bas
Public go As Object, gu As IUnknown, gv As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B6D5, dispatch slot 0x66107C14, modOpcodes line 1245.
ImpAdStVarUnk
(3,0xBD)emittedhandler #561Variantinferred_corpusPops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a module-level (global) variable.
Stack: [..., v:Var] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a IUnknown into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarUnk).
Public Sub Main()
Dim u As IUnknown
Set modG.gv = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As Variant
Encoding, evidence and notes
Encoding: FD BD (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDBD 0000 ImpAdStVarUnk global_402018
FDBD 0000 ImpAdStVarUnk global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BD_ImpAdStVarUnk.
Handler: 0x6610B546, unique to this slot (real opcode #561).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim u As IUnknown
Set modG.gv = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B546, dispatch slot 0x66107C08, modOpcodes line 1242.
ImpAdStVarUnkFunc
(3,0xBE)emittedhandler #562Variantinferred_corpusPops an IUnknown pointer returned by a call, stored into a Variant as VT_UNKNOWN without an extra AddRef, and writes it to a module-level (global) variable.
Stack: [..., v:Var] -> [...]
Operands: %c: constant-pool index whose slot holds the variable's address.
Standard-EXE module variables (and Public variables of other modules) referenced by address. In ActiveX DLL/EXE projects module variables are per-thread and use FMem* instead.
Emitted for assignments to a module-level (global) variable when the value is a IUnknown from a call into a Variant. The storage class selects the prefix (ImpAd); the value class selects the suffix (VarUnkFunc).
Public Sub Main()
Dim u As IUnknown
Set modG.gv = FU()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As Variant
Encoding, evidence and notes
Encoding: FD BE (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %c
Operands:
%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: FDBE 0100 ImpAdStVarUnkFunc global_402018
FDBE 0100 ImpAdStVarUnkFunc global_402018
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_BE_ImpAdStVarUnkFunc.
Handler: 0x6610B52C, unique to this slot (real opcode #562).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim u As IUnknown
Set modG.gv = FU()
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
' ---- modG.bas
Public gv As VariantDescription: draft, by claude-opus-5-5. Handler 0x6610B52C, dispatch slot 0x66107C0C, modOpcodes line 1243.
LateId_Call
Late-bound DispID call Prefix: Id = DispID
LateIdCall
(4,0xA0)emittedhandler #664Object / COMcontextual79 corpus hitsCalls IDispatch::Invoke(DISPATCH_METHOD) on the object with a DISPID known at compile time from the type library, so no GetIDsOfNames is needed. Operands (6 bytes): DISPID and argument count/flags (observed 0000 0200 0000 for Printer.EndDoc).
Emitted for method calls on objects whose type is a dispatch-only interface known from a type library (e.g. VB's Printer, a typelib dispinterface).
Public Sub Main()
Printer.EndDoc
End Sub
Encoding, evidence and notes
Encoding: FE A0 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEA0 000002000000 LateIdCall
FEA0 000002000000 LateIdCall
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A0_LateIdCall.
Handler: 0x66105AF4, unique to this slot (real opcode #664).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 79 occurrence(s) in PDFStreamDumper_p.exe.
Public Sub Main()
Printer.EndDoc
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105AF4, dispatch slot 0x66107F94, modOpcodes line 336.
LateIdCallLdVar
(4,0xA2)emittedhandler #665Object / COMinferred_corpus17 corpus hitsLateIdCallLdVar).Invokes IDispatch::Invoke with a DispID already known at compile time. The compiler uses this path when it has seen the type library and can baked the DispID, but the binding is still IDispatch-based rather than vtable.
Emitted for Object-typed receivers where the type library provides DispIDs at compile.
Public Sub Main()
Dim o As Object, v As Variant
v = o(1)
End Sub
Encoding, evidence and notes
Encoding: FE A2 (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FEA2 38FF000000000100 LateIdCallLdVar var_C8
Form2.ExtractFunction @ 0x45FB40 | 45FBB1 FEA2 0CFF3C0003600100 LateIdCallLdVar var_F4 scivb2.SciSimple.GetLineText(ByVal lline As Long) As String
Form2.GetIndentLevel @ 0x449204 | 44924C FEA2 44FF3C0003600100 LateIdCallLdVar var_BC scivb2.SciSimple.GetLineText(ByVal lline As Long) As String
Form2.mnuFunctionScan_Click @ 0x4688A0 | 468968 FEA2 54FF3C0003600100 LateIdCallLdVar var_AC scivb2.SciSimple.GetLineText(ByVal lline As Long) As String
17 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A2_LateIdCallLdVar.
Handler: 0x66105B06, unique to this slot (real opcode #665).
Corpus: 17 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105B06, dispatch slot 0x66107F9C, modOpcodes line 338.
LateIdCallSt
(4,0xA4)emittedhandler #666Object / COMinferred_corpuso(i) = v / o.P(i) = v).Calls IDispatch::Invoke(DISPATCH_PROPERTYPUT) with the indices and the assigned value. Observed for o(1) = 2 on o As Object, where the default member has DISPID 0. Operands (6 bytes): DISPID and argument count.
Emitted for an assignment to an indexed default member or a known-DISPID property.
Public Sub Main()
Dim o As Object, v As Variant
o(1) = 2
End Sub
Encoding, evidence and notes
Encoding: FE A4 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEA4 000000000100 LateIdCallSt
FEA4 000000000100 LateIdCallSt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A4_LateIdCallSt.
Handler: 0x66105B40, unique to this slot (real opcode #666).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object, v As Variant
o(1) = 2
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105B40, dispatch slot 0x66107FA4, modOpcodes line 337.
LateId_Load
Late-bound DispID property get Prefix: Id = DispID
LateIdLdVar
(0,0x61)emittedprimary of 2handler #94Object / COMcontextual464 corpus hitsCalls IDispatch::Invoke(DISPATCH_PROPERTYGET) with a DISPID known at compile time and stores the result in the temporary given by the first operand (observed 60FF 0200 0000: var_A0, DISPID 2 = IFontDisp.Size).
Emitted for property reads through dispatch-only typelib interfaces (IFontDisp, StdFont default interface, typelib dispinterfaces).
Public Sub Main()
Dim f As StdFont, g As IFontDisp, s As String
s = g.Size
End Sub
Encoding, evidence and notes
Encoding: 61, then 6 operand byte(s); total instruction length 7 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 61 60FF02000000 LateIdLdVar
61 60FF02000000 LateIdLdVar
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_61_LateIdLdVar.
Handler: 0x66105AE0, shared by 2 dispatch slots (real opcode #94). This is the primary slot. Other slots: (4,A1) LateIdLdVar.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 464 occurrence(s) in PDFStreamDumper_p.exe.
Public Sub Main()
Dim f As StdFont, g As IFontDisp, s As String
s = g.Size
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105AE0, dispatch slot 0x66106E98, modOpcodes line 344.
LateIdLdVar
(4,0xA1)not emitteddup of (0,61)handler #94Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE A1 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105AE0, shared by 2 dispatch slots (real opcode #94). This is a duplicate slot of (0,61) LateIdLdVar. Other slots: (0,61) LateIdLdVar.
Description: none. Handler 0x66105AE0, dispatch slot 0x66107F98, modOpcodes line 345.
LateId_Named
Late-bound DispID with named args Prefix: Id+named
LateIdNamedCall
(4,0xAA)emittedhandler #672Object / COMcontextualLate-bound call by DISPID with named arguments, on a dispinterface whose type is known at compile time (for example StdPicture, or a typelib dispinterface). Operand block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs. Each named DISPID is the parameter's position in the member (for Picture.Render, hdc = 0 ... prcWBounds = 9). Instruction length = 4 + len; the size column (9) is the zero-name minimum. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for o.Add v:=1, key:="a" where o is a typelib dispinterface.
lblEX_LateIdNamedCall (0x6610A868) reads len (named bytes = len-6), the DISPID and cArgs. ExLateIdNamed reverses the named DISPID array to match rgvarg and calls SafeInvoke with flags 1 (DISPATCH_METHOD). vbdec resolves names when the object came from a typed call: the call's return type gives the interface, and the member is found by DISPID.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, v As Variant, c As Object
o.Add v:=1, key:="a"
End Sub
Encoding, evidence and notes
Encoding: FE AA (lead byte FE selects table 4), then a variable-length block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 401467 FEAA 0E00040000000200 [8 bytes] LateIdNamedCall dispid:0x4 args:2 named:(#0:=, #1:=)
401467 FEAA 0E00040000000200 [8 bytes] LateIdNamedCall dispid:0x4 args:2 named:(#0:=, #1:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
p.Render hdc:=hdc, x:=0, ... prcWBounds:=0 (p from LoadPicture) -> LateIdNamedCall Picture.Render args:10 named:(hdc:=, x:=, y:=, cx:=, cy:=, xSrc:=, ySrc:=, cxSrc:=, cySrc:=, prcWBounds:=)
d.Add key:="k", v:=1 -> LateIdNamedCall dispid:0x4 args:2 named:(#1:=, #0:=)
p.Render 0, 0, cy:=1, cx:=2, y:=3, ... -> named DISPIDs 4,3,2,5,6,7,8,9 (positional args not listed)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AA_LateIdNamedCall.
Handler: 0x6610A868, unique to this slot (real opcode #672).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, v As Variant, c As Object
o.Add v:=1, key:="a"
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A868, dispatch slot 0x66107FBC, modOpcodes line 347.
LateIdNamedCallLdVar
(4,0xAB)emittedhandler #673Object / COMcontextualAs LateIdNamedCall, for a call whose result is used. Operand block: u16 len first, then i16 %a (the result Variant temporary), u32 dispid, u16 cArgs, then (len-8)/4 x u32 named DISPIDs. Instruction length = 4 + len. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for Set c = o.Child(n:=2) / v = o.Item(idx:=1) on a typelib dispinterface.
lblEX_LateIdNamedCallLdVar (0x6610A8A0): named bytes = len-8; flags 3 (DISPATCH_METHOD | DISPATCH_PROPERTYGET); shared lblExLateIdNamed / ExLateIdNamed path.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, c As Object
Set c = o.Child(n:=2)
End Sub
Encoding, evidence and notes
Encoding: FE AB (lead byte FE selects table 4), then a variable-length block: u16 len, i16 %a (result Variant), u32 dispid, u16 cArgs, then (len-8)/4 x u32 named DISPIDs.
Size: 4 + len bytes in total; the size column (11) is the minimum, with no named arguments.
Observed (decoded): 401455 FEAB 0C0044FF050000000100 [4 bytes] LateIdNamedCallLdVar var_BC = dispid:0x5 args:1 named:(#0:=)
401455 FEAB 0C0044FF050000000100 [4 bytes] LateIdNamedCallLdVar var_BC = dispid:0x5 args:1 named:(#0:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
r = d.Item(idx:=1) -> LateIdNamedCallLdVar var_C4 = dispid:0x3 args:1 named:(#0:=)
r = d.Mix(1, 2, d:=4, c:=3) -> LateIdNamedCallLdVar var_118 = dispid:0x9 args:4 named:(#3:=, #2:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AB_LateIdNamedCallLdVar.
Handler: 0x6610A8A0, unique to this slot (real opcode #673).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, c As Object
Set c = o.Child(n:=2)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A8A0, dispatch slot 0x66107FC0, modOpcodes line 348.
LateIdNamedCallSt
(4,0xAC)emittedhandler #674Object / COMcontextualLate-bound property Let by DISPID with named index arguments (d.Indexed(i:=1) = 5). Same operand block as LateIdNamedCall. The assigned value comes from the stack and is not counted in cArgs, and no DISPID_PROPERTYPUT (-3) entry is stored: the runtime adds it. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for o.Indexed(i:=1) = 2 on a typelib dispinterface.
lblEX_LateIdNamedCallSt (0x6610A8BD) reads the same fields and calls ExLateIdNamedCallSt.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, c As Object
o.Indexed(i:=1) = 2
End Sub
Encoding, evidence and notes
Encoding: FE AC (lead byte FE selects table 4), then a variable-length block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 40145E FEAC 0A00060000000100 [4 bytes] LateIdNamedCallSt dispid:0x6 args:1 named:(#0:=)
40145E FEAC 0A00060000000100 [4 bytes] LateIdNamedCallSt dispid:0x6 args:1 named:(#0:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
d.Indexed(i:=1) = 5 -> LateIdNamedCallSt dispid:0x6 args:1 named:(#0:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AC_LateIdNamedCallSt.
Handler: 0x6610A8BD, unique to this slot (real opcode #674).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, c As Object
o.Indexed(i:=1) = 2
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A8BD, dispatch slot 0x66107FC4, modOpcodes line 349.
LateIdNamedStAd
(4,0xAD)emittedhandler #675Object / COMcontextualLate-bound property Set (by reference) by DISPID with named index arguments (Set d.ObjAt(i:=1) = x). Same operand block as LateIdNamedCall. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for Set o.ObjAt(i:=1) = Nothing where o is a typelib dispinterface (DOnly in probetlb, member ObjAt added 2026-10-14) and the property takes an index argument.
lblEX_LateIdNamedStAd (0x6610A8E9): same fields, flags 8 (DISPATCH_PROPERTYPUTREF), ExLateIdNamedSt.
Option Explicit
Public Sub Main()
Dim o As DOnly
Set o.ObjAt(i:=1) = Nothing
End Sub
Encoding, evidence and notes
Encoding: FE AD (lead byte FE selects table 4), then a variable-length block: u16 len, u32 dispid, u16 cArgs (every argument), then (len-6)/4 x u32 named-argument DISPIDs.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 40145E FEAD 0A00080000000100 [4 bytes] LateIdNamedStAd dispid:0x8 args:1 named:(#0:=)
40145E FEAD 0A00080000000100 [4 bytes] LateIdNamedStAd dispid:0x8 args:1 named:(#0:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
Set d.ObjAt(i:=2) = Nothing -> LateIdNamedStAd dispid:0x8 args:1 named:(#0:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_AD_LateIdNamedStAd (added 2026-10-14; it needed an indexed propputref member, DOnly.ObjAt, in the probe typelib).
Handler: 0x6610A8E9, unique to this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
Option Explicit
Public Sub Main()
Dim o As DOnly
Set o.ObjAt(i:=1) = Nothing
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A8E9, dispatch slot 0x66107FC8, modOpcodes line 350.
LateId_Store
Late-bound DispID property put Prefix: Id = DispID
LateIdSt
(0,0x2C)emittedprimary of 2handler #43Object / COMcontextual201 corpus hitsPops the value and the object and calls IDispatch::Invoke(DISPATCH_PROPERTYPUT) with the DISPID from the operand (observed 0000 0000: DISPID 0 = Font.Name).
Emitted for f.Name = "x" where the property belongs to a dispatch interface known from a type library.
Public Sub Main()
Dim f As StdFont, v As Variant
f.Name = "x"
End Sub
Encoding, evidence and notes
Encoding: 2C, then 4 operand byte(s); total instruction length 5 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 2C 00000000 LateIdSt
2C 00000000 LateIdSt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2C_LateIdSt.
Handler: 0x66105B1C, shared by 2 dispatch slots (real opcode #43). This is the primary slot. Other slots: (4,A3) LateIdSt.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 201 occurrence(s) in PDFStreamDumper_p.exe.
Public Sub Main()
Dim f As StdFont, v As Variant
f.Name = "x"
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105B1C, dispatch slot 0x66106DC4, modOpcodes line 340.
LateIdSt
(4,0xA3)not emitteddup of (0,2C)handler #43Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE A3 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105B1C, shared by 2 dispatch slots (real opcode #43). This is a duplicate slot of (0,2C) LateIdSt. Other slots: (0,2C) LateIdSt.
Description: none. Handler 0x66105B1C, dispatch slot 0x66107FA0, modOpcodes line 341.
LateIdStAd
(4,0xA5)emittedhandler #667Object / COMinferred_corpusSet o(i) = obj).Calls IDispatch::Invoke(DISPATCH_PROPERTYPUTREF) with the indices and the object. Operands: DISPID and argument count.
Emitted for Set o(1) = Nothing on o As Object (default member, DISPID 0).
Public Sub Main()
Dim o As Object
Set o(1) = Nothing
End Sub
Encoding, evidence and notes
Encoding: FE A5 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEA5 000000000100 LateIdStAd
FEA5 000000000100 LateIdStAd
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A5_LateIdStAd.
Handler: 0x66105B2D, unique to this slot (real opcode #667).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
Set o(1) = Nothing
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105B2D, dispatch slot 0x66107FA8, modOpcodes line 342.
LateMem_Call
Late-bound member call Prefix: Late = IDispatch::Invoke
LateMemCall
(4,0x98)emittedhandler #657Object / COMinferred_corpus11 corpus hitsLateMemCall).Performs IDispatch::GetIDsOfNames for the member name, then IDispatch::Invoke with DISPATCH_METHOD. Operand %c resolves the name string from the const pool; additional operands carry the argument count.
Emitted for every late-bound method call (receiver typed Object, Variant, or DAO/ADO interfaces).
Public Sub Main()
Dim o As Object, n As Long
o.DoIt n
End Sub
Encoding, evidence and notes
Encoding: FE 98 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %s args:%2
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).%2(args): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FE98 00000100 LateMemCall str_4011E8='DoIt' args:0x1
Form1.LoadPlugins @ 0x4644FC | 464797 FE98 19000100 LateMemCall str_41CC60='sethost' args:0x1
Form1.mnuPluginList_Event_0 @ 0x44C3D4 | 44C46B FE98 92000100 LateMemCall str_41F060='startup' args:0x1
Form1.cmdDecode_Click @ 0x4775C0 | 477F51 FE98 4A010100 LateMemCall str_420B64='initasLib' args:0x1
11 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_98_LateMemCall.
Handler: 0x66105B96, unique to this slot (real opcode #657).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As Object
o.SomeMethod arg1, arg2Description: draft, by claude-opus-4.7. Handler 0x66105B96, dispatch slot 0x66107F74, modOpcodes line 330.
LateMemCallLdVar
(4,0x9A)emittedhandler #658Object / COMinferred_corpus9 corpus hitsPerforms IDispatch::GetIDsOfNames for the member name, then IDispatch::Invoke with DISPATCH_METHOD. Operand %c resolves the name string from the const pool; additional operands carry the argument count.
Emitted for v = o.Method(args) (the result is used) where o is typed Object. Statement calls whose result is discarded use LateMemCall.
Public Sub Main()
Dim o As Object, v As Variant
v = o.DoIt(1, "a")
End Sub
Encoding, evidence and notes
Encoding: FE 9A (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %s args:%2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).%2(args): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FE9A 18FF01000200 LateMemCallLdVar var_E8 str_4011F4='DoIt' args:0x2
CScriptFunctions.GetListviewData @ 0x44080C | 440824 FE9A 4CFF03000100 LateMemCallLdVar var_B4 str_426A10='ListItems' args:0x1
CScriptFunctions.GetPageNumWords @ 0x442608 | 44261B FE9A 68FF10000100 LateMemCallLdVar var_98 str_426C88='GetPageNumWords' args:0x1
CScriptFunctions.GetPageNthWord @ 0x44018C | 4401A5 FE9A 5CFF13000200 LateMemCallLdVar var_A4 str_426CF4='GetPageNthWord' args:0x2
9 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9A_LateMemCallLdVar.
Handler: 0x66105BA9, unique to this slot (real opcode #658).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 9 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As Object, v As Variant
v = o.DoIt(1, "a")Description: draft, by claude-opus-5-5. Handler 0x66105BA9, dispatch slot 0x66107F7C, modOpcodes line 329.
LateMemCallSt
(4,0x9C)emittedhandler #660Object / COMinferred_corpuso.Prop(i) = v).Resolves the member name from the string pool via GetIDsOfNames, then calls Invoke(DISPATCH_PROPERTYPUT) with the index arguments and the value.
Operands: %s member name, args:%2 argument count.
Emitted for an indexed property assignment on an Object variable.
Public Sub Main()
Dim o As Object
o.Prop(1) = 5
End Sub
Encoding, evidence and notes
Encoding: FE 9C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %s args:%2
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).%2(args): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FE9C 00000100 LateMemCallSt str_4011E8='Prop' args:0x1
FE9C 00000100 LateMemCallSt str_4011E8='Prop' args:0x1
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9C_LateMemCallSt.
Handler: 0x66105C0E, unique to this slot (real opcode #660).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
o.Prop(1) = 5
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105C0E, dispatch slot 0x66107F84, modOpcodes line 326.
LateMem_Load
Late-bound member property get Prefix: Late = IDispatch::Invoke
LateMemLdVar
(0,0x57)emittedprimary of 2handler #85Object / COMinferred_corpus25 corpus hitsLateMemLdVar).Invokes a property's Get accessor via IDispatch::Invoke with DISPATCH_PROPERTYGET. Pushes the returned value onto the stack.
Emitted at every late-bound property read.
Public Sub Main()
Dim o As Object, v As Variant
v = o.Prop
End Sub
Encoding, evidence and notes
Encoding: 57, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %s
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: 57 58FF0000 LateMemLdVar var_A8 str_4011E8='Prop'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C0E 57 5CFFB000 LateMemLdVar var_A4 str_41F72C='SelText'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C37 57 5CFFB100 LateMemLdVar var_A4 str_41F73C='Text'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467C5A 57 5CFFB200 LateMemLdVar var_A4 str_41F748='SelStart'
25 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_57_LateMemLdVar.
Handler: 0x66105B4E, shared by 2 dispatch slots (real opcode #85). This is the primary slot. Other slots: (4,99) LateMemLdVar.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 25 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As Object, x As Variant
x = o.SomePropertyDescription: draft, by claude-opus-4.7. Handler 0x66105B4E, dispatch slot 0x66106E70, modOpcodes line 323.
LateMemLdVar
(4,0x99)not emitteddup of (0,57)handler #85Object / COMconfirmed_handlerLateMemLdVar).Encoding, evidence and notes
Encoding: FE 99 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105B4E, shared by 2 dispatch slots (real opcode #85). This is a duplicate slot of (0,57) LateMemLdVar. Other slots: (0,57) LateMemLdVar.
Description: none. Handler 0x66105B4E, dispatch slot 0x66107F78, modOpcodes line 324.
LateMem_Named
Late-bound member with named args Prefix: Named-arg variant
LateMemNamedCall
(4,0xA6)emittedhandler #668Object / COMcontextualLate-bound call by name with named arguments, on an Object/Variant. The member name and every argument name are resolved with IDispatch::GetIDsOfNames at run time, then Invoke is called with DISPATCH_METHOD. Operand block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names. Instruction length = 4 + len. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for o.DoIt A:=1, B:=2 on an Object variable.
lblEX_LateMemNamedCall (0x6610A968) reads len, the member index and cArgs. ExLateMemNamedImp builds [member, names...] from the procedure's const pool ([ebp-54h]), reversing the named list; DoLateMemNamed calls GetIDsOfNames and SafeInvoke with flags 1 (DISPATCH_METHOD). If the member resolves but an argument name does not, the error is reported as DISP_E_PARAMNOTFOUND.
Public Sub Main()
Dim o As Object
o.DoIt A:=1, B:=2
End Sub
Encoding, evidence and notes
Encoding: FE A6 (lead byte FE selects table 4), then a variable-length block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names.
Size: 4 + len bytes in total; the size column (7) is the minimum, with no named arguments.
Observed (decoded): 40147B FEA6 080000000200 [4 bytes] LateMemNamedCall DoIt args:2 named:(A:=, B:=)
40147B FEA6 080000000200 [4 bytes] LateMemNamedCall DoIt args:2 named:(A:=, B:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
o.Add key:="k", v:=1 -> LateMemNamedCall Add args:2 named:(key:=, v:=)
o.Add 1, key:="k" -> LateMemNamedCall Add args:2 named:(key:=)
o.Mix 10, c:=3, d:=4, b:=2 -> LateMemNamedCall Mix args:4 named:(c:=, d:=, b:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A6_LateMemNamedCall.
Handler: 0x6610A968, unique to this slot (real opcode #668).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
Public Sub Main()
Dim o As Object
o.DoIt A:=1, B:=2
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A968, dispatch slot 0x66107FAC, modOpcodes line 331.
LateMemNamedCallLdVar
(4,0xA7)emittedhandler #669Object / COMcontextualAs LateMemNamedCall, for a call whose result is used. Operand block: u16 len, i16 %a (the result Variant temporary), u16 member, u16 cArgs, then (len-6)/2 x u16 name indices. Instruction length = 4 + len. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for v = o.DoIt(A:=1, B:=2).
lblEX_LateMemNamedCallLdVar (0x6610A9A2): len comes first, then the result frame offset; flags 3 (DISPATCH_METHOD | DISPATCH_PROPERTYGET), then the shared lblExLateMemNamed path.
Public Sub Main()
Dim o As Object, v As Variant
v = o.DoIt(A:=1, B:=2)
End Sub
Encoding, evidence and notes
Encoding: FE A7 (lead byte FE selects table 4), then a variable-length block: u16 len, i16 %a (result Variant), u16 member, u16 cArgs, then (len-6)/2 x u16 name indices.
Size: 4 + len bytes in total; the size column (9) is the minimum, with no named arguments.
Observed (decoded): 40147B FEA7 0A0018FF00000200 [4 bytes] LateMemNamedCallLdVar var_E8 = DoIt args:2 named:(A:=, B:=)
40147B FEA7 0A0018FF00000200 [4 bytes] LateMemNamedCallLdVar var_E8 = DoIt args:2 named:(A:=, B:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
r = o.Item(idx:=1) -> LateMemNamedCallLdVar var_C4 = Item args:1 named:(idx:=)
r = o.Mix(1, 2, d:=4, c:=3) -> LateMemNamedCallLdVar var_118 = Mix args:4 named:(d:=, c:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A7_LateMemNamedCallLdVar.
Handler: 0x6610A9A2, unique to this slot (real opcode #669).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
Public Sub Main()
Dim o As Object, v As Variant
v = o.DoIt(A:=1, B:=2)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A9A2, dispatch slot 0x66107FB0, modOpcodes line 332.
LateMemNamedCallSt
(4,0xA8)emittedhandler #670Object / COMcontextualLate-bound property Let by name with named index arguments (o.P(i:=1) = v). Same operand block as LateMemNamedCall. The value being assigned comes from the stack and is not counted in cArgs or in the name list. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for o.Prop(A:=1) = 2.
lblEX_LateMemNamedCallSt (0x6610A9C0) reads the same fields and calls ExLateMemNamedCallStImp (DISPATCH_PROPERTYPUT).
Public Sub Main()
Dim o As Object
o.Prop(A:=1) = 2
End Sub
Encoding, evidence and notes
Encoding: FE A8 (lead byte FE selects table 4), then a variable-length block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names.
Size: 4 + len bytes in total; the size column (7) is the minimum, with no named arguments.
Observed (decoded): 401473 FEA8 060000000100 [2 bytes] LateMemNamedCallSt Prop args:1 named:(A:=)
401473 FEA8 060000000100 [2 bytes] LateMemNamedCallSt Prop args:1 named:(A:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
o.Indexed(i:=1) = 5 -> LateMemNamedCallSt Indexed args:1 named:(i:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A8_LateMemNamedCallSt.
Handler: 0x6610A9C0, unique to this slot (real opcode #670).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
Public Sub Main()
Dim o As Object
o.Prop(A:=1) = 2
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A9C0, dispatch slot 0x66107FB4, modOpcodes line 333.
LateMemNamedStAd
(4,0xA9)emittedhandler #671Object / COMcontextualLate-bound property Set (by reference) by name with named index arguments (Set o.P(i:=1) = x). Same operand block as LateMemNamedCall. Names are stored in source order (the runtime reverses them to match rgvarg). Positional arguments are pushed first and are not listed, so cArgs can exceed the number of names; each argument value is pushed before the call (one PopAdLdVar each).
Emitted for Set o.Prop(A:=1) = x.
lblEX_LateMemNamedStAd (0x6610A9EE): same fields, flags 8 (DISPATCH_PROPERTYPUTREF), ExLateMemNamedStImp.
Public Sub Main()
Dim o As Object
Set o.Prop(A:=1) = Nothing
End Sub
Encoding, evidence and notes
Encoding: FE A9 (lead byte FE selects table 4), then a variable-length block: u16 len, u16 member (const-pool index of the member name), u16 cArgs (every argument), then (len-4)/2 x u16 const-pool indices of the argument names.
Size: 4 + len bytes in total; the size column (7) is the minimum, with no named arguments.
Observed (decoded): 401474 FEA9 060000000100 [2 bytes] LateMemNamedStAd Prop args:1 named:(A:=)
401474 FEA9 060000000100 [2 bytes] LateMemNamedStAd Prop args:1 named:(A:=)
Phase 4 probe, decoded by vbdec's named-call post-processor (2026-10-14).
More cases from the layout probes:
Set o.ObjAt(i:=2) = Nothing -> LateMemNamedStAd ObjAt args:1 named:(i:=)Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_A9_LateMemNamedStAd.
Handler: 0x6610A9EE, unique to this slot (real opcode #671).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Runtime check: Confirmed 2026-10-14 against the runtime handler and compiled probes covering all four variants, named arguments out of order and positional arguments mixed in (probes\_lateid via lateid_lab.py, probes\_latemem via latemem_lab.py).
Public Sub Main()
Dim o As Object
Set o.Prop(A:=1) = Nothing
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A9EE, dispatch slot 0x66107FB8, modOpcodes line 334.
LateMem_Store
Late-bound member property put Prefix: Late = IDispatch::Invoke
LateMemSt
(4,0x9B)emittedhandler #659Object / COMinferred_corpus16 corpus hitsLateMemSt).Invokes a property's Let/Set accessor via IDispatch::Invoke with DISPATCH_PROPERTYPUT (or PROPERTYPUTREF for Set-style assignment).
Emitted at every late-bound property write; the Set vs Let form is chosen by the value's type.
Public Sub Main()
Dim o As Object
o.Prop = 5
End Sub
Encoding, evidence and notes
Encoding: FE 9B (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: FE9B 0000 LateMemSt str_4011E8='Prop'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467F29 FE9B B000 LateMemSt str_41F72C='SelText'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467F3A FE9B B200 LateMemSt str_41F748='SelStart'
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467F4C FE9B C000 LateMemSt str_41F774='SelLength'
16 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9B_LateMemSt.
Handler: 0x66105BC0, unique to this slot (real opcode #659).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As Object
o.SomeProperty = newValueDescription: draft, by claude-opus-4.7. Handler 0x66105BC0, dispatch slot 0x66107F80, modOpcodes line 325.
LateMemStAd
(4,0x9D)emittedhandler #661Object / COMinferred_corpusSet o.Prop = obj).Resolves the name and calls Invoke(DISPATCH_PROPERTYPUTREF). Operand: string-pool index of the member name.
Emitted for Set o.Prop = x on an Object variable.
Public Sub Main()
Dim o As Object
Set o.Prop = Nothing
End Sub
Encoding, evidence and notes
Encoding: FE 9D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE9D 00000000 LateMemStAd
FE9D 00000000 LateMemStAd
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_9D_LateMemStAd.
Handler: 0x66105BFD, unique to this slot (real opcode #661).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
Set o.Prop = Nothing
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105BFD, dispatch slot 0x66107F88, modOpcodes line 327.
Lit
Push literal onto stack
LitCy
(0,0xF6)emittedprimary of 3handler #243Currencyinferred_corpusPushes the 8 operand bytes onto the evaluation stack as-is.
Stack: [...] -> [..., c:Cy]
Operand %C: 8 bytes. For Currency, the value is the scaled integer (1.5@ = 0x3A98 = 15000). Phase 4 also observed it carrying an IEEE double when a Double literal is passed ByVal or printed, so treat it as a raw 8-byte push. vbdec always formats it as Currency.
Emitted for Currency literals and for some Double literals pushed by value.
Public Sub Main()
Dim a As Currency, c As Currency
a = 1.5@
End Sub
Encoding, evidence and notes
Encoding: F6, then 8 operand byte(s); total instruction length 9 byte(s).
vbdec template: %C
Operands:
%C: literal_currency, 8 byte(s). 8-byte Currency literal (scaled 64-bit integer, value*10000).
Observed: F6 983A000000000000 LitCy 1.5
F6 983A000000000000 LitCy 1.5
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F6_LitCy.
Handler: 0x6610AA36, shared by 3 dispatch slots (real opcode #243). This is the primary slot. Other slots: (4,BB) LitR8, (4,BC) LitR8.
Finding: Probe: emitted for Currency literals, and with raw 8-byte double payloads when a Double literal is passed ByVal or used in a Print # list. Effectively an 8-byte raw push. vbdec's display decodes it as Currency even when the bytes are a double. Same handler as LitR8 (4,BB/BC).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Currency, c As Currency
a = 1.5@
End Sub(4,0xBB) LitR8, (4,0xBC) LitR8
Description: draft, by claude-opus-5-5. Handler 0x6610AA36, dispatch slot 0x661070EC, modOpcodes line 770.
LitCy4
(0,0xF7)not emittedprimary of 2handler #244Currencyinferred_corpusEncoding, evidence and notes
Encoding: F7, then 4 operand byte(s); total instruction length 5 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA22, shared by 2 dispatch slots (real opcode #244). This is the primary slot. Other slots: (4,B7) LitCy4.
Description: none. Handler 0x6610AA22, dispatch slot 0x661070F0, modOpcodes line 771.
LitCy4
(4,0xB7)not emitteddup of (0,F7)handler #244Currencyconfirmed_handlerEncoding, evidence and notes
Encoding: FE B7 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA22, shared by 2 dispatch slots (real opcode #244). This is a duplicate slot of (0,F7) LitCy4. Other slots: (0,F7) LitCy4.
Description: none. Handler 0x6610AA22, dispatch slot 0x66107FF0, modOpcodes line 772.
LitDate
(0,0xFA)emittedprimary of 3handler #247Floating pointinferred_corpusLoads the 8-byte IEEE double operand onto the FPU stack.
Stack: [...] -> [..., d:R8 (ST0)]
Operand %D: 8-byte double. Dates are their serial number (#1/1/2000# = 36526).
Emitted for Date literals and ordinary Double literals assigned to Double/Date/Single targets (probe: d = 2.5). The name understates its use.
Public Sub Main()
Dim a As Date, c As Date
a = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding: FA, then 8 operand byte(s); total instruction length 9 byte(s).
vbdec template: %D
Operands:
%D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).
Observed: FA 00000000C0D5E140 LitDate 36526
FA 00000000C0D5E140 LitDate 36526
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_FA_LitDate.
Handler: 0x66105CDE, shared by 3 dispatch slots (real opcode #247). This is the primary slot. Other slots: (4,BD) LitR8FP, (4,BE) LitR8FP.
Finding: Probe: emitted for plain Double literals (d = 2.5) as well as Date literals. The operand is an 8-byte IEEE double pushed to the FPU. The LitDate name is too narrow. Same handler as LitR8FP (4,BD/BE).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Date, c As Date
a = #1/1/2000#
End Sub(4,0xBD) LitR8FP, (4,0xBE) LitR8FP
Description: draft, by claude-opus-5-5. Handler 0x66105CDE, dispatch slot 0x661070FC, modOpcodes line 740.
LitI2
(0,0xF3)emittedprimary of 2handler #240Integerconfirmed_handler39 corpus hitsAlias dispatch slot (0, 0xF3) for the canonical LitI2 at (4, 0xB5); semantics are identical.
Pushes the 2-byte immediate as a signed I2 onto the stack.
Stack: [...] -> [..., lit:I2]
Emitted for Integer literal values requiring more than a byte.
Public Sub Main()
Dim a As Integer, c As Integer
a = 300
End Sub
Encoding, evidence and notes
Encoding: F3, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %2
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: F3 2C01 LitI2 0x12C
Form1.Form_Resize @ 0x474F3C | 474F9D F3 6419 LitI2 0x1964
Form1.Form_Resize @ 0x474F3C | 474FA7 F3 6419 LitI2 0x1964
Form1.Form_Resize @ 0x474F3C | 474FC4 F3 C832 LitI2 0x32C8
39 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F3_LitI2.
Handler: 0x66105C98, shared by 2 dispatch slots (real opcode #240). This is the primary slot. Other slots: (4,B5) LitI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 39 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Integer
n = 12345Description: draft, by claude-opus-4.7. Handler 0x66105C98, dispatch slot 0x661070E0, modOpcodes line 759.
LitI2
(4,0xB5)not emitteddup of (0,F3)handler #240Integerinferred_corpusEncoding, evidence and notes
Encoding: FE B5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %2
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105C98, shared by 2 dispatch slots (real opcode #240). This is a duplicate slot of (0,F3) LitI2. Other slots: (0,F3) LitI2.
Description: none. Handler 0x66105C98, dispatch slot 0x66107FE8, modOpcodes line 758.
LitI2FP
(0,0xF8)not emittedprimary of 2handler #245Integerinferred_corpusEncoding, evidence and notes
Encoding: F8, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA4C, shared by 2 dispatch slots (real opcode #245). This is the primary slot. Other slots: (4,B6) LitI2FP.
Description: none. Handler 0x6610AA4C, dispatch slot 0x661070F4, modOpcodes line 775.
LitI2FP
(4,0xB6)not emitteddup of (0,F8)handler #245Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FE B6 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA4C, shared by 2 dispatch slots (real opcode #245). This is a duplicate slot of (0,F8) LitI2FP. Other slots: (0,F8) LitI2FP.
Description: none. Handler 0x6610AA4C, dispatch slot 0x66107FEC, modOpcodes line 776.
LitI2_Byte
(0,0xF4)emittedprimary of 2handler #241Integerinferred_corpus1047 corpus hitsCompact form of LitI2: the immediate is 1 byte and is sign-extended to I2 on the stack. Used for small Integer constants (-128..127).
Stack: [...] -> [..., lit:I2]
Emitted for small Integer literals that fit in a signed byte.
Public Sub Main()
Dim a As Boolean, c As Boolean
a = True
End Sub
Encoding, evidence and notes
Encoding: F4, then 1 operand byte(s); total instruction length 2 byte(s).
vbdec template: %1
Operands:
%1: immediate_byte, 1 byte(s). 8-bit immediate.
Observed: F4 FF LitI2_Byte 255
Form1.LoadPlugins @ 0x4644FC | 464616 F4 00 LitI2_Byte 0
Form1.LoadPlugins @ 0x4644FC | 46461E F4 01 LitI2_Byte 1
Form1.RegisterPlugin @ 0x44CB20 | 44CB91 F4 FF LitI2_Byte 255
1047 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F4_LitI2_Byte.
Handler: 0x66105CAB, shared by 2 dispatch slots (real opcode #241). This is the primary slot. Other slots: (5,1A) LitI2_Byte.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1047 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Integer
n = 5Description: draft, by claude-opus-4.7. Handler 0x66105CAB, dispatch slot 0x661070E4, modOpcodes line 760.
LitI2_Byte
(5,0x1A)not emitteddup of (0,F4)handler #241Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FF 1A (lead byte FF selects table 5), then 1 operand byte(s); total instruction length 3 byte(s).
vbdec template: %1
Operands:
%1: immediate_byte, 1 byte(s). 8-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105CAB, shared by 2 dispatch slots (real opcode #241). This is a duplicate slot of (0,F4) LitI2_Byte. Other slots: (0,F4) LitI2_Byte.
Description: none. Handler 0x66105CAB, dispatch slot 0x6610817C, modOpcodes line 761.
LitI4
(0,0xF5)emittedprimary of 3handler #242Integerinferred_corpus3006 corpus hitsPushes the 4-byte immediate as a signed I4 onto the stack.
Stack: [...] -> [..., lit:I4]
Emitted for Long literal expressions.
Public Sub Main()
Dim c As Variant
c = vbNullString
End Sub
Encoding, evidence and notes
Encoding: F5, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %4
Operands:
%4: immediate_dword, 4 byte(s). 32-bit immediate.
Observed: F5 00000000 LitI4 0x0
Form1.LoadPlugins @ 0x4644FC | 4645FA F5 00000000 LitI4 0x0
Form1.LoadPlugins @ 0x4644FC | 4645FF F5 00000000 LitI4 0x0
Form1.LoadPlugins @ 0x4644FC | 46462B F5 00000000 LitI4 0x0
3006 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F5_LitI4.
Handler: 0x66105CBE, shared by 3 dispatch slots (real opcode #242). This is the primary slot. Other slots: (4,B8) LitI4, (4,B9) LitI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3006 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
n = 1000000(4,0xB8) LitI4, (4,0xB9) LitI4
Description: draft, by claude-opus-4.7. Handler 0x66105CBE, dispatch slot 0x661070E8, modOpcodes line 765.
LitI4
(4,0xB8)not emitteddup of (0,F5)handler #242Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FE B8 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %4
Operands:
%4: immediate_dword, 4 byte(s). 32-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105CBE, shared by 3 dispatch slots (real opcode #242). This is a duplicate slot of (0,F5) LitI4. Other slots: (0,F5) LitI4, (4,B9) LitI4.
(0,0xF5) LitI4, (4,0xB9) LitI4
Description: none. Handler 0x66105CBE, dispatch slot 0x66107FF4, modOpcodes line 766.
LitI4
(4,0xB9)not emitteddup of (0,F5)handler #242Integerconfirmed_handlerEncoding, evidence and notes
Encoding: FE B9 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %4
Operands:
%4: immediate_dword, 4 byte(s). 32-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105CBE, shared by 3 dispatch slots (real opcode #242). This is a duplicate slot of (0,F5) LitI4. Other slots: (0,F5) LitI4, (4,B8) LitI4.
(0,0xF5) LitI4, (4,0xB8) LitI4
Description: none. Handler 0x66105CBE, dispatch slot 0x66107FF8, modOpcodes line 767.
LitNothing
(2,0x63)emittedhandler #400Object / COMconfirmed_msdocs90 corpus hitsLitNothing.Pushes a compile-time constant onto the stack. The constant value is embedded in the operand stream (see printf template).
Emitted for every literal expression of the corresponding type.
Public Sub Main()
Dim c As Variant
Set c = Nothing
End Sub
Encoding, evidence and notes
Encoding: FC 63 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC63 LitNothing
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4613B7 FC63 LitNothing
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A828 FC63 LitNothing
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45C9D4 FC63 LitNothing
90 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_63_LitNothing.
Handler: 0x66105CD0, unique to this slot (real opcode #400).
Corpus: 90 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105CD0, dispatch slot 0x661076A0, modOpcodes line 754.
LitR4FP
(0,0xF9)emittedprimary of 2handler #246Floating pointinferred_corpusLoads the 4-byte IEEE single operand onto the FPU stack.
Stack: [...] -> [..., f:R4 (ST0)]
Operand %!: 4-byte single (1.5! = 0x3FC00000).
Emitted for Single literals (1.5!, or literals representable as Single in a Single context).
Public Sub Main()
Dim a As Single, c As Single
a = 1.5!
End Sub
Encoding, evidence and notes
Encoding: F9, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %!
Operands:
%!: literal_single, 4 byte(s). 4-byte IEEE single literal.
Observed: F9 0000C03F LitR4FP 1.5
F9 0000C03F LitR4FP 1.5
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_F9_LitR4FP.
Handler: 0x6610AA5D, shared by 2 dispatch slots (real opcode #246). This is the primary slot. Other slots: (4,BA) LitR4FP.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Single, c As Single
a = 1.5!
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AA5D, dispatch slot 0x661070F8, modOpcodes line 778.
LitR4FP
(4,0xBA)not emitteddup of (0,F9)handler #246Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FE BA (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %!
Operands:
%!: literal_single, 4 byte(s). 4-byte IEEE single literal.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA5D, shared by 2 dispatch slots (real opcode #246). This is a duplicate slot of (0,F9) LitR4FP. Other slots: (0,F9) LitR4FP.
Description: none. Handler 0x6610AA5D, dispatch slot 0x66107FFC, modOpcodes line 779.
LitR8
(4,0xBB)not emitteddup of (0,F6)handler #243Floating pointinferred_corpusEncoding, evidence and notes
Encoding: FE BB (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA36, shared by 3 dispatch slots (real opcode #243). This is a duplicate slot of (0,F6) LitCy. Other slots: (0,F6) LitCy, (4,BC) LitR8.
(0,0xF6) LitCy, (4,0xBC) LitR8
Description: none. Handler 0x6610AA36, dispatch slot 0x66108000, modOpcodes line 781.
LitR8
(4,0xBC)not emitteddup of (0,F6)handler #243Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FE BC (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA36, shared by 3 dispatch slots (real opcode #243). This is a duplicate slot of (0,F6) LitCy. Other slots: (0,F6) LitCy, (4,BB) LitR8.
(0,0xF6) LitCy, (4,0xBB) LitR8
Description: none. Handler 0x6610AA36, dispatch slot 0x66108004, modOpcodes line 782.
LitR8FP
(4,0xBD)not emitteddup of (0,FA)handler #247Floating pointinferred_corpusEncoding, evidence and notes
Encoding: FE BD (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105CDE, shared by 3 dispatch slots (real opcode #247). This is a duplicate slot of (0,FA) LitDate. Other slots: (0,FA) LitDate, (4,BE) LitR8FP.
(0,0xFA) LitDate, (4,0xBE) LitR8FP
Description: none. Handler 0x66105CDE, dispatch slot 0x66108008, modOpcodes line 783.
LitR8FP
(4,0xBE)not emitteddup of (0,FA)handler #247Floating pointconfirmed_handlerEncoding, evidence and notes
Encoding: FE BE (lead byte FE selects table 4), then 8 operand byte(s); total instruction length 10 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105CDE, shared by 3 dispatch slots (real opcode #247). This is a duplicate slot of (0,FA) LitDate. Other slots: (0,FA) LitDate, (4,BD) LitR8FP.
(0,0xFA) LitDate, (4,0xBD) LitR8FP
Description: none. Handler 0x66105CDE, dispatch slot 0x6610800C, modOpcodes line 784.
LitStr
(0,0x1B)emittedprimary of 2handler #26Stringinferred_corpus1171 corpus hitsPushes a BSTR onto the stack. The operand %s is a const-pool offset whose payload is the string bytes; the runtime takes a refcounted reference (does not allocate a copy).
Stack: [...] -> [..., lit:Str]
Emitted for every String literal expression.
Public Sub Main()
Dim a As String, c As String
a = "12"
End Sub
Encoding, evidence and notes
Encoding: 1B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: 1B 0000 LitStr str_4011EC='12'
Form1.LoadPlugins @ 0x4644FC | 464521 1B 0500 LitStr str_41C9A0='\plugins'
Form1.LoadPlugins @ 0x4644FC | 4645BC 1B 0500 LitStr str_41C9A0='\plugins'
Form1.LoadPlugins @ 0x4644FC | 464664 1B 0E00 LitStr str_41CBB8='.plugin'
1171 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_1B_LitStr.
Handler: 0x66105CEF, shared by 2 dispatch slots (real opcode #26). This is the primary slot. Other slots: (4,BF) LitStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1171 occurrence(s) in PDFStreamDumper_p.exe.
Dim s As String
s = "hello"Description: draft, by claude-opus-4.7. Handler 0x66105CEF, dispatch slot 0x66106D80, modOpcodes line 742.
LitStr
(4,0xBF)not emitteddup of (0,1B)handler #26Stringconfirmed_handlerEncoding, evidence and notes
Encoding: FE BF (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105CEF, shared by 2 dispatch slots (real opcode #26). This is a duplicate slot of (0,1B) LitStr. Other slots: (0,1B) LitStr.
Description: none. Handler 0x66105CEF, dispatch slot 0x66108010, modOpcodes line 743.
Lit_Var
Push literal variant
LitVarCy
(4,0xC3)emittedhandler #682Variantinferred_corpusWrites a VT_CY Variant holding the 8-byte operand into the temporary %a and pushes its address.
Operands: %a temporary, 8-byte scaled Currency value. (vbdec's template labels the value %D and shows it as a double; the bytes are Currency: 983A000000000000 = 1.5@.)
Emitted for v = 1.5@.
Public Sub Main()
Dim c As Variant
c = 1.5@
End Sub
Encoding, evidence and notes
Encoding: FE C3 (lead byte FE selects table 4), then 10 operand byte(s); total instruction length 12 byte(s).
vbdec template: %a %D
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).
Observed: FEC3 5CFF983A000000000000LitVarCy var_A4 7.4109846876187E-320
FEC3 5CFF983A000000000000LitVarCy var_A4 7.4109846876187E-320
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C3_LitVarCy.
Handler: 0x6610AAB3, unique to this slot (real opcode #682).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant
c = 1.5@
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AAB3, dispatch slot 0x66108020, modOpcodes line 773.
LitVarDate
(4,0xC5)emittedhandler #684Variantinferred_corpusWrites a VT_DATE Variant holding the 8-byte serial date into the temporary %a and pushes its address.
Emitted for v = #1/1/2000#.
Public Sub Main()
Dim c As Variant
c = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding: FE C5 (lead byte FE selects table 4), then 10 operand byte(s); total instruction length 12 byte(s).
vbdec template: %a %D
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).
Observed: FEC5 5CFF00000000C0D5E140LitVarDate var_A4 36526
FEC5 5CFF00000000C0D5E140LitVarDate var_A4 36526
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C5_LitVarDate.
Handler: 0x6610AABD, unique to this slot (real opcode #684).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant
c = #1/1/2000#
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AABD, dispatch slot 0x66108028, modOpcodes line 739.
LitVarI2
(0,0x28)emittedprimary of 2handler #39Variantinferred_corpus573 corpus hitsPushes a Variant whose subtype is Integer and value is the I2 immediate read from the operand stream.
Stack: [...] -> [..., (lit):Var]
Emitted for small integer literals (-32768..32767) used where a Variant is needed: v = 0, Variant arguments, Case values for a Variant selector.
Public Sub Main()
Dim c As Variant
c = 0
End Sub
Encoding, evidence and notes
Encoding: 28, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a,%2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.
Observed: 28 5CFF0000 LitVarI2 var_A4,0x0
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A303 28 40FF0000 LitVarI2 var_C0,0x0
Form1.Form_Resize @ 0x474F3C | 4756B2 28 14FF0100 LitVarI2 var_EC,0x1
Form1.Form_Resize @ 0x474F3C | 4756FB 28 24FF0100 LitVarI2 var_DC,0x1
573 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_28_LitVarI2.
Handler: 0x66105D6E, shared by 2 dispatch slots (real opcode #39). This is the primary slot. Other slots: (4,C0) LitVarI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 573 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v = 5Description: draft, by claude-opus-5-5. Handler 0x66105D6E, dispatch slot 0x66106DB4, modOpcodes line 762.
LitVarI2
(4,0xC0)not emitteddup of (0,28)handler #39Variantconfirmed_handlerEncoding, evidence and notes
Encoding: FE C0 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a = %2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105D6E, shared by 2 dispatch slots (real opcode #39). This is a duplicate slot of (0,28) LitVarI2. Other slots: (0,28) LitVarI2.
Description: none. Handler 0x66105D6E, dispatch slot 0x66108014, modOpcodes line 763.
LitVarI4
(4,0xC1)emittedhandler #680Variantinferred_corpus33 corpus hitsPushes a Variant whose subtype is Long and value is the I4 immediate read from the operand stream.
Stack: [...] -> [..., (lit):Var]
Emitted for integer literals outside the Integer range, or with the & suffix, used where a Variant is needed (v = 70000, v = &HFFFF&).
Public Sub Main()
Dim c As Variant
c = &HFFFF&
End Sub
Encoding, evidence and notes
Encoding: FE C1 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a = %4
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%4: immediate_dword, 4 byte(s). 32-bit immediate.
Observed: FEC1 5CFFFFFF0000 LitVarI4 var_A4 = 0xFFFF
Form1.mnuSecureDownload_Click @ 0x456570 | 4566DF FEC1 40FF10000000 LitVarI4 var_C0 = 0x10
Form1.mnuJavascriptUI_Click @ 0x45B844 | 45BA0A FEC1 28FF00000000 LitVarI4 var_D8 = 0x0
fso.Proc_44A0B4 @ 0x44A0B4 | 44A112 FEC1 54FF00000000 LitVarI4 var_AC = 0x0
33 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C1_LitVarI4.
Handler: 0x66105D85, unique to this slot (real opcode #680).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 33 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v = 70000Description: draft, by claude-opus-5-5. Handler 0x66105D85, dispatch slot 0x66108018, modOpcodes line 768.
LitVarR4
(4,0xC2)emittedhandler #681Variantinferred_corpusWrites a VT_R4 Variant holding the 4-byte operand into the temporary %a (observed 5CFF 0000C03F = var_A4, 1.5).
Emitted for v = 1.5!.
Public Sub Main()
Dim c As Variant
c = 1.5!
End Sub
Encoding, evidence and notes
Encoding: FE C2 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEC2 5CFF0000C03F LitVarR4
FEC2 5CFF0000C03F LitVarR4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C2_LitVarR4.
Handler: 0x6610AAA9, unique to this slot (real opcode #681).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant
c = 1.5!
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AAA9, dispatch slot 0x6610801C, modOpcodes line 786.
LitVarR8
(4,0xC4)emittedhandler #683Variantinferred_corpusWrites a VT_R8 Variant holding the 8-byte double into the temporary %a and pushes its address.
Emitted for v = 1.5# (and Double literals in Variant contexts).
Public Sub Main()
Dim c As Variant
c = 1.5#
End Sub
Encoding, evidence and notes
Encoding: FE C4 (lead byte FE selects table 4), then 10 operand byte(s); total instruction length 12 byte(s).
vbdec template: %a %D
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%D: literal_double, 8 byte(s). 8-byte IEEE double literal (also used for Date).
Observed: FEC4 5CFF000000000000F83FLitVarR8 var_A4 1.5
FEC4 5CFF000000000000F83FLitVarR8 var_A4 1.5
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_C4_LitVarR8.
Handler: 0x66105DA0, unique to this slot (real opcode #683).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant
c = 1.5#
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105DA0, dispatch slot 0x66108024, modOpcodes line 787.
LitVarStr
(0,0x3A)emittedprimary of 2handler #57Variantinferred_corpus1195 corpus hitsPushes a literal whose subtype and value are encoded in the operand stream.
Emitted wherever the literal LitVarStr is required in a Variant-typed expression.
Public Sub Main()
Dim c As Variant
c = "s"
End Sub
Encoding, evidence and notes
Encoding: 3A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %s
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: 3A 5CFF0000 LitVarStr var_A4 str_4011EC='s'
Form1.LoadPlugins @ 0x4644FC | 46454B 3A 44FF0700 LitVarStr var_BC str_41CB50='Plugins folder not found'
Form1.LoadPlugins @ 0x4644FC | 4645AE 3A 44FF0900 LitVarStr var_BC str_41CB98='*dll'
Form1.mn_b64EncClip_Click @ 0x447B64 | 447BED 3A 64FF2300 LitVarStr var_9C str_41CD64='Clipboard text encoded (not binary safe)'
1195 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_3A_LitVarStr.
Handler: 0x66105D47, shared by 2 dispatch slots (real opcode #57). This is the primary slot. Other slots: (4,C6) LitVarStr.
Corpus: 1195 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105D47, dispatch slot 0x66106DFC, modOpcodes line 744.
LitVarStr
(4,0xC6)not emitteddup of (0,3A)handler #57Variantconfirmed_handlerEncoding, evidence and notes
Encoding: FE C6 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105D47, shared by 2 dispatch slots (real opcode #57). This is a duplicate slot of (0,3A) LitVarStr. Other slots: (0,3A) LitVarStr.
Description: none. Handler 0x66105D47, dispatch slot 0x6610802C, modOpcodes line 745.
LitVarUI1
(4,0x3D)not emittedhandler #614Variantinferred_corpusEncoding, evidence and notes
Encoding: FE 3D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AA90, unique to this slot (real opcode #614).
Description: none. Handler 0x6610AA90, dispatch slot 0x66107E08, modOpcodes line 756.
LitVar_Empty
(2,0x67)emittedhandler #403Variantinferred_corpus123 corpus hitsEmpty literal in a temporary.Pushes a Variant of subtype Empty -- the state of a freshly-declared, never-assigned Variant. Use IsEmpty() to test.
Stack: [...] -> [..., Empty:Var]
Emitted for the Empty keyword in a Variant context (v = Empty, Empty passed as an argument).
Public Sub Main()
Dim c As Variant
c = Empty
End Sub
Encoding, evidence and notes
Encoding: FC 67 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FC67 5CFF LitVar_Empty var_A4
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467DEF FC67 44FF LitVar_Empty var_BC
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E19 FC67 44FF LitVar_Empty var_BC
Form1.mnuManualEscape_Event_0 @ 0x467B64 | 467E43 FC67 44FF LitVar_Empty var_BC
123 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_67_LitVar_Empty.
Handler: 0x6610AA6E, unique to this slot (real opcode #403).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 123 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v = EmptyDescription: draft, by claude-opus-5-5. Handler 0x6610AA6E, dispatch slot 0x661076B0, modOpcodes line 751.
LitVar_FALSE
(2,0x66)emittedhandler #402Variantinferred_corpus41 corpus hitsPushes a Variant whose subtype is Boolean and value is False.
Stack: [...] -> [..., False:Var]
Emitted wherever the literal LitVar_FALSE is required in a Variant-typed expression.
Public Sub Main()
Dim c As Variant
c = False
End Sub
Encoding, evidence and notes
Encoding: FC 66 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FC66 5CFF LitVar_FALSE var_A4
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E44D FC66 30FF LitVar_FALSE var_D0
Form1.lv_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x447E40 | 447E88 FC66 24FF LitVar_FALSE var_DC
Form1.Form_Load @ 0x479DC0 | 47A53A FC66 94FD LitVar_FALSE var_26C
41 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_66_LitVar_FALSE.
Handler: 0x66105D2A, unique to this slot (real opcode #402).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 41 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v = FalseDescription: draft, by claude-opus-4.7. Handler 0x66105D2A, dispatch slot 0x661076AC, modOpcodes line 750.
LitVar_Missing
(0,0x27)emittedprimary of 2handler #38Variantconfirmed_handler1060 corpus hitsMissing value (an omitted Optional argument) in a temporary.Writes a VT_ERROR Variant with value DISP_E_PARAMNOTFOUND (0x80020004, what IsMissing tests) into temporary %a and pushes its address.
Stack: [...] -> [..., Missing:Var]
Emitted when a call omits an Optional ... As Variant argument, including the many optional parameters of VB runtime functions (Format$, MsgBox, ...). The compiler uses this slot; (2,68), which shares the handler, is never emitted.
Public Sub Main()
Opt
End Sub
Sub Opt(Optional v As Variant)
End Sub
Encoding, evidence and notes
Encoding: 27, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 27 5CFF LitVar_Missing var_A4
Form1.LoadPlugins @ 0x4644FC | 46453F 27 B4FE LitVar_Missing var_14C
Form1.LoadPlugins @ 0x4644FC | 464542 27 D4FE LitVar_Missing var_12C
Form1.LoadPlugins @ 0x4644FC | 464545 27 F4FE LitVar_Missing var_10C
1060 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_27_LitVar_Missing.
Handler: 0x66105D07, shared by 2 dispatch slots (real opcode #38). This is the primary slot. Other slots: (2,68) LitVar_Missing.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1060 occurrence(s) in PDFStreamDumper_p.exe.
Sub Opt(Optional v As Variant)
End Sub
Sub Main()
Opt
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105D07, dispatch slot 0x66106DB0, modOpcodes line 753.
LitVar_Missing
(2,0x68)not emitteddup of (0,27)handler #38Variantinferred_corpusMissing value (an omitted Optional argument) in a temporary.Encoding, evidence and notes
Encoding: FC 68 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105D07, shared by 2 dispatch slots (real opcode #38). This is a duplicate slot of (0,27) LitVar_Missing. Other slots: (0,27) LitVar_Missing.
Description: none. Handler 0x66105D07, dispatch slot 0x661076B4, modOpcodes line 752.
LitVar_Null
(2,0x64)emittedhandler #401Variantinferred_corpusWrites VT_NULL into the temporary %a and pushes its address.
Emitted for v = Null.
Public Sub Main()
Dim c As Variant
c = Null
End Sub
Encoding, evidence and notes
Encoding: FC 64 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FC64 5CFF LitVar_Null var_A4
FC64 5CFF LitVar_Null var_A4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_64_LitVar_Null.
Handler: 0x6610AA7F, unique to this slot (real opcode #401).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant
c = Null
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AA7F, dispatch slot 0x661076A4, modOpcodes line 747.
LitVar_TRUE
(0,0x63)emittedprimary of 2handler #96Variantinferred_corpus50 corpus hitsPushes a Variant whose subtype is Boolean and value is True.
Stack: [...] -> [..., True:Var]
Emitted wherever the literal LitVar_TRUE is required in a Variant-typed expression.
Public Sub Main()
Dim c As Variant
c = True
End Sub
Encoding, evidence and notes
Encoding: 63, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 63 5CFF LitVar_TRUE var_A4
Form1.mnuNewHexEditorWin_Click @ 0x45AC2C | 45AC5B 63 5CFF LitVar_TRUE var_A4
Form1.looksEscaped @ 0x449B64 | 449BBE 63 5CFF LitVar_TRUE var_A4
Form1.looksEscaped @ 0x449B64 | 449BEF 63 5CFF LitVar_TRUE var_A4
50 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_63_LitVar_TRUE.
Handler: 0x66105D30, shared by 2 dispatch slots (real opcode #96). This is the primary slot. Other slots: (2,65) LitVar_TRUE.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v = TrueDescription: draft, by claude-opus-4.7. Handler 0x66105D30, dispatch slot 0x66106EA0, modOpcodes line 748.
LitVar_TRUE
(2,0x65)not emitteddup of (0,63)handler #96Variantconfirmed_handlerEncoding, evidence and notes
Encoding: FC 65 (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105D30, shared by 2 dispatch slots (real opcode #96). This is a duplicate slot of (0,63) LitVar_TRUE. Other slots: (0,63) LitVar_TRUE.
Description: none. Handler 0x66105D30, dispatch slot 0x661076A8, modOpcodes line 749.
Logic_And
Logical/bitwise AND
AndI4
(0,0xC4)emittedprimary of 4handler #193Integerconfirmed_msdocs114 corpus hitsAnd.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a & b.
Stack: [..., a:I4, b:I4] -> [..., (a & b):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the And operator on I4-typed operands; Variant operands emit AndVar.
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = a And b
End Sub
Encoding, evidence and notes
Encoding: C4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C4 AndI4
Form1.mnuExtractURI_Click @ 0x45774C | 45782B C4 AndI4
Form1.mnuExtractURI_Click @ 0x45774C | 457833 C4 AndI4
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 456770 C4 AndI4
114 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C4_AndI4.
Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is the primary slot. Other slots: (1,21) AndUI1, (1,22) AndUI1, (1,23) AndUI1.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 114 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a And b(1,0x21) AndUI1, (1,0x22) AndUI1, (1,0x23) AndUI1
Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x66107024, modOpcodes line 1395.
AndUI1
(1,0x21)not emitteddup of (0,C4)handler #193Integerconfirmed_msdocsAnd.Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes bitwise a & b.
Stack: [..., a:UI1, b:UI1] -> [..., (a & b):UI1]
Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the And operator on UI1-typed operands; Variant operands emit AndVar.
Dim a As Byte, b As Byte, c As Byte
c = a And b
Encoding, evidence and notes
Encoding: FB 21 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is a duplicate slot of (0,C4) AndI4. Other slots: (0,C4) AndI4, (1,22) AndUI1, (1,23) AndUI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C4) AndI4 (same handler, different slot)
(0,0xC4) AndI4, (1,0x22) AndUI1, (1,0x23) AndUI1
Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x66107198, modOpcodes line 1396.
AndUI1
(1,0x22)not emitteddup of (0,C4)handler #193Integerconfirmed_handlerAnd.Alias dispatch slot (1, 0x22) for the canonical AndUI1 at (1, 0x21); semantics are identical.
Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes bitwise a & b.
Stack: [..., a:UI1, b:UI1] -> [..., (a & b):UI1]
Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the And operator on UI1-typed operands; Variant operands emit AndVar.
Dim a As Byte, b As Byte, c As Byte
c = a And b
Encoding, evidence and notes
Encoding: FB 22 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is a duplicate slot of (0,C4) AndI4. Other slots: (0,C4) AndI4, (1,21) AndUI1, (1,23) AndUI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C4) AndI4 (same handler, different slot)
(0,0xC4) AndI4, (1,0x21) AndUI1, (1,0x23) AndUI1
Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x6610719C, modOpcodes line 1397.
AndUI1
(1,0x23)not emitteddup of (0,C4)handler #193Integerconfirmed_handlerAnd.Alias dispatch slot (1, 0x23) for the canonical AndUI1 at (1, 0x21); semantics are identical.
Pops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), pushes bitwise a & b.
Stack: [..., a:UI1, b:UI1] -> [..., (a & b):UI1]
Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the And operator on UI1-typed operands; Variant operands emit AndVar.
Dim a As Byte, b As Byte, c As Byte
c = a And b
Encoding, evidence and notes
Encoding: FB 23 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105EA9, shared by 4 dispatch slots (real opcode #193). This is a duplicate slot of (0,C4) AndI4. Other slots: (0,C4) AndI4, (1,21) AndUI1, (1,22) AndUI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C4) AndI4 (same handler, different slot)
(0,0xC4) AndI4, (1,0x21) AndUI1, (1,0x22) AndUI1
Description: draft, by claude-opus-4.7. Handler 0x66105EA9, dispatch slot 0x661071A0, modOpcodes line 1398.
AndVar
(1,0x27)emittedhandler #262Variantinferred_corpus14 corpus hitsAnd.Pops two VBA Variant operands b and a (top is b), pushes bitwise a & b.
Stack: [..., a:Var, b:Var] -> [..., (a & b):Var]
Variant variant performs type coercion; for non-Boolean operands the operation is bitwise on the integer representation. Three-state logic (Null) is honored per VB6 rules.
Emitted for the And operator on Var-typed operands; Variant operands emit AndVar.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a And b
End Sub
Encoding, evidence and notes
Encoding: FB 27 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB27 3CFF AndVar var_C4
fso.Proc_467FC4 @ 0x467FC4 | 4680F8 FB27 9CFE AndVar var_164
fso.Proc_467FC4 @ 0x467FC4 | 468148 FB27 8CFE AndVar var_174
Form2.mnuFindFuncDependancies_Click @ 0x460130 | 46029A FB27 F8FE AndVar var_108
14 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_27_AndVar.
Handler: 0x66105F74, unique to this slot (real opcode #262).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a And bDescription: draft, by claude-opus-4.7. Handler 0x66105F74, dispatch slot 0x661071B0, modOpcodes line 1399.
Logic_Eqv
VB Eqv operator (equivalence)
EqvI4
(1,0x0A)emittedprimary of 2handler #257Integerconfirmed_msdocsEqv).a Eqv b is Not (a Xor b) bitwise. Result bits are 1 where the input bits agree.
Stack: [..., a:I4, b:I4] -> [..., (a Eqv b):I4]
Emitted for the Eqv operator on I4-typed operands.
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding: FB 0A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB0A EqvI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_0A_EqvI4.
Handler: 0x6610AD35, shared by 2 dispatch slots (real opcode #257). This is the primary slot. Other slots: (1,0B) EqvI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,0A):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Eqv b - (1,0B):
Dim a As Long, b As Long, c As Long : c = a Eqv b
Finding: Compiler selects this slot for Integer/Boolean operands (a Eqv b with Integer or Boolean). (1,0B) is used for Long and wider. Both share one handler. Effective meaning: EqvI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,0B) EqvI4 (same handler, different slot)
Dim a As Long, b As Long, c As Long
c = a Eqv bDescription: draft, by claude-opus-4.7. Handler 0x6610AD35, dispatch slot 0x6610713C, modOpcodes line 1470.
EqvI4
(1,0x0B)emitteddup of (1,0A)handler #257Integerconfirmed_handlerEqv).Alias dispatch slot (1, 0x0B) for the canonical EqvI4 at (1, 0x0A); semantics are identical.
a Eqv b is Not (a Xor b) bitwise. Result bits are 1 where the input bits agree.
Stack: [..., a:I4, b:I4] -> [..., (a Eqv b):I4]
Emitted for the Eqv operator on I4-typed operands.
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding: FB 0B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB0B EqvI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_0B_EqvI4.
Handler: 0x6610AD35, shared by 2 dispatch slots (real opcode #257). This is a duplicate slot of (1,0A) EqvI4. Other slots: (1,0A) EqvI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,0A):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Eqv b - (1,0B):
Dim a As Long, b As Long, c As Long : c = a Eqv b
Finding: Compiler selects this slot for Long, Single, Double, Currency, Date and String operands (all coerced to Long). (1,0A) is used for Integer/Boolean.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Long, b As Long, c As Long
c = a Eqv bDescription: draft, by claude-opus-4.7. Handler 0x6610AD35, dispatch slot 0x66107140, modOpcodes line 1471.
EqvUI1
(1,0x09)emittedhandler #256Integerconfirmed_msdocsEqv).a Eqv b is Not (a Xor b) bitwise. Result bits are 1 where the input bits agree.
Stack: [..., a:UI1, b:UI1] -> [..., (a Eqv b):UI1]
Emitted for the Eqv operator on UI1-typed operands.
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding: FB 09 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB09 EqvUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_09_EqvUI1.
Handler: 0x6610AD22, unique to this slot (real opcode #256).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a Eqv bDescription: draft, by claude-opus-4.7. Handler 0x6610AD22, dispatch slot 0x66107138, modOpcodes line 1469.
EqvVar
(1,0x0F)emittedhandler #258Variantinferred_corpusEqv); result Variant in a temporary.Pops two Variants, applies bitwise equivalence (Eqv) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when either operand of bitwise equivalence (Eqv) is a Variant.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Eqv b
End Sub
Encoding, evidence and notes
Encoding: FB 0F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB0F 3CFF EqvVar var_C4
FB0F 3CFF EqvVar var_C4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_0F_EqvVar.
Handler: 0x6610AE2A, unique to this slot (real opcode #258).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Eqv b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AE2A, dispatch slot 0x66107150, modOpcodes line 1472.
Logic_Imp
VB Imp operator (implication)
ImpI4
(1,0x02)emittedprimary of 2handler #254Integerconfirmed_msdocsImp).a Imp b is (Not a) Or b bitwise. For Booleans this is material implication. VB6's Imp is rarely seen outside of legacy code and propositional-logic exercises.
Stack: [..., a:I4, b:I4] -> [..., (a Imp b):I4]
Emitted for the Imp operator on I4-typed operands.
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = a Imp b
End Sub
Encoding, evidence and notes
Encoding: FB 02 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB02 ImpI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_02_ImpI4.
Handler: 0x6610AD5B, shared by 2 dispatch slots (real opcode #254). This is the primary slot. Other slots: (1,03) ImpI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,02):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Imp b - (1,03):
Dim a As Long, b As Long, c As Long : c = a Imp b
Finding: Compiler selects this slot for Integer/Boolean operands of Imp. (1,03) is used for Long and wider. Effective meaning: ImpI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,03) ImpI4 (same handler, different slot)
Dim a As Long, b As Long, c As Long
c = a Imp bDescription: draft, by claude-opus-4.7. Handler 0x6610AD5B, dispatch slot 0x6610711C, modOpcodes line 1417.
ImpI4
(1,0x03)emitteddup of (1,02)handler #254Integerconfirmed_handlerImp).Alias dispatch slot (1, 0x03) for the canonical ImpI4 at (1, 0x02); semantics are identical.
a Imp b is (Not a) Or b bitwise. For Booleans this is material implication. VB6's Imp is rarely seen outside of legacy code and propositional-logic exercises.
Stack: [..., a:I4, b:I4] -> [..., (a Imp b):I4]
Emitted for the Imp operator on I4-typed operands.
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a Imp b
End Sub
Encoding, evidence and notes
Encoding: FB 03 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB03 ImpI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_03_ImpI4.
Handler: 0x6610AD5B, shared by 2 dispatch slots (real opcode #254). This is a duplicate slot of (1,02) ImpI4. Other slots: (1,02) ImpI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,02):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Imp b - (1,03):
Dim a As Long, b As Long, c As Long : c = a Imp b
Finding: Compiler selects this slot for Long and wider operands of Imp. (1,02) is used for Integer/Boolean.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Long, b As Long, c As Long
c = a Imp bDescription: draft, by claude-opus-4.7. Handler 0x6610AD5B, dispatch slot 0x66107120, modOpcodes line 1418.
ImpUI1
(1,0x01)emittedhandler #253Integerconfirmed_msdocsImp).a Imp b is (Not a) Or b bitwise. For Booleans this is material implication. VB6's Imp is rarely seen outside of legacy code and propositional-logic exercises.
Stack: [..., a:UI1, b:UI1] -> [..., (a Imp b):UI1]
Emitted for the Imp operator on UI1-typed operands.
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a Imp b
End Sub
Encoding, evidence and notes
Encoding: FB 01 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB01 ImpUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_01_ImpUI1.
Handler: 0x6610AD48, unique to this slot (real opcode #253).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a Imp bDescription: draft, by claude-opus-4.7. Handler 0x6610AD48, dispatch slot 0x66107118, modOpcodes line 1416.
ImpVar
(1,0x07)emittedhandler #255Variantinferred_corpusImp); result Variant in a temporary.Pops two Variants, applies bitwise implication (Imp) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when either operand of bitwise implication (Imp) is a Variant.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Imp b
End Sub
Encoding, evidence and notes
Encoding: FB 07 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB07 3CFF ImpVar var_C4
FB07 3CFF ImpVar var_C4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_07_ImpVar.
Handler: 0x6610AE35, unique to this slot (real opcode #255).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Imp b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AE35, dispatch slot 0x66107130, modOpcodes line 1419.
Logic_Not
Logical/bitwise NOT
NotI4
(0,0xC3)emittedprimary of 3handler #192Integerconfirmed_msdocs159 corpus hitsNot.Pops one 32-bit signed integer (VB6 Long) operand a, pushes bitwise NOT a.
Stack: [..., a:I4] -> [..., (~a):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Not unary operator on a I4-typed operand.
Public Sub Main()
Dim a As Boolean, c As Boolean
c = Not a
End Sub
Encoding, evidence and notes
Encoding: C3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C3 NotI4
Form1.LoadPlugins @ 0x4644FC | 46452D C3 NotI4
Form1.mnuAlwaysUseZlib_Click @ 0x43FBDC | 43FBF1 C3 NotI4
Form1.mnuAutoSwitchTabs_Click @ 0x43F834 | 43F849 C3 NotI4
159 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C3_NotI4.
Handler: 0x66105E9A, shared by 3 dispatch slots (real opcode #192). This is the primary slot. Other slots: (1,BF) NotI4, (1,C0) NotI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 159 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, c As Long
c = Not a(1,0xBF) NotI4, (1,0xC0) NotI4
Description: draft, by claude-opus-4.7. Handler 0x66105E9A, dispatch slot 0x66107020, modOpcodes line 1389.
NotI4
(1,0xBF)not emitteddup of (0,C3)handler #192Integerconfirmed_handlerNot.Alias dispatch slot (1, 0xBF) for the canonical NotI4 at (0, 0xC3); semantics are identical.
Pops one 32-bit signed integer (VB6 Long) operand a, pushes bitwise NOT a.
Stack: [..., a:I4] -> [..., (~a):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Not unary operator on a I4-typed operand.
Dim a As Long, c As Long
c = Not a
Encoding, evidence and notes
Encoding: FB BF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E9A, shared by 3 dispatch slots (real opcode #192). This is a duplicate slot of (0,C3) NotI4. Other slots: (0,C3) NotI4, (1,C0) NotI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C3) NotI4 (same handler, different slot)
(0,0xC3) NotI4, (1,0xC0) NotI4
Description: draft, by claude-opus-4.7. Handler 0x66105E9A, dispatch slot 0x66107410, modOpcodes line 1390.
NotI4
(1,0xC0)not emitteddup of (0,C3)handler #192Integerconfirmed_handlerNot.Alias dispatch slot (1, 0xC0) for the canonical NotI4 at (0, 0xC3); semantics are identical.
Pops one 32-bit signed integer (VB6 Long) operand a, pushes bitwise NOT a.
Stack: [..., a:I4] -> [..., (~a):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Not unary operator on a I4-typed operand.
Dim a As Long, c As Long
c = Not a
Encoding, evidence and notes
Encoding: FB C0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E9A, shared by 3 dispatch slots (real opcode #192). This is a duplicate slot of (0,C3) NotI4. Other slots: (0,C3) NotI4, (1,BF) NotI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C3) NotI4 (same handler, different slot)
(0,0xC3) NotI4, (1,0xBF) NotI4
Description: draft, by claude-opus-4.7. Handler 0x66105E9A, dispatch slot 0x66107414, modOpcodes line 1391.
NotUI1
(1,0xBE)emittedhandler #329Integerconfirmed_msdocsNot.Pops one 8-bit unsigned integer (VB6 Byte) operand a, pushes bitwise NOT a.
Stack: [..., a:UI1] -> [..., (~a):UI1]
Operands are treated as a UI1-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Not unary operator on a UI1-typed operand.
Public Sub Main()
Dim a As Byte, c As Byte
c = Not a
End Sub
Encoding, evidence and notes
Encoding: FB BE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBBE NotUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_BE_NotUI1.
Handler: 0x6610AD03, unique to this slot (real opcode #329).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, c As Byte
c = Not aDescription: draft, by claude-opus-4.7. Handler 0x6610AD03, dispatch slot 0x6610740C, modOpcodes line 1392.
NotVar
(1,0xC4)emittedhandler #330Variantinferred_corpus5 corpus hitsNot.Pops one VBA Variant operand a, pushes bitwise NOT a.
Stack: [..., a:Var] -> [..., (~a):Var]
Variant variant performs type coercion; for non-Boolean operands the operation is bitwise on the integer representation. Three-state logic (Null) is honored per VB6 rules.
Emitted for the Not unary operator on a Var-typed operand.
Public Sub Main()
Dim a As Variant, c As Variant
c = Not a
End Sub
Encoding, evidence and notes
Encoding: FB C4 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBC4 4CFF NotVar var_B4
Form2.ExtractFunction @ 0x45FB40 | 45FD7B FBC4 0CFF NotVar var_F4
modEscapes.Proc_472E38 @ 0x472E38 | 4731D0 FBC4 18FF NotVar var_E8
CSharpFilters.Decrypt @ 0x455BDC | 455CF2 FBC4 10FF NotVar var_F0
5 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_C4_NotVar.
Handler: 0x66105F2E, unique to this slot (real opcode #330).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 5 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, c As Variant
c = Not aDescription: draft, by claude-opus-4.7. Handler 0x66105F2E, dispatch slot 0x66107424, modOpcodes line 1393.
Logic_Or
Logical/bitwise OR
OrI2
(1,0x19)not emitteddup of (0,C5)handler #194Integerconfirmed_msdocsOr.Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes bitwise a | b.
Stack: [..., a:I2, b:I2] -> [..., (a | b):I2]
Operands are treated as a I2-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Or operator on I2-typed operands; Variant operands emit OrVar.
Dim a As Integer, b As Integer, c As Integer
c = a Or b
Encoding, evidence and notes
Encoding: FB 19 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is a duplicate slot of (0,C5) OrI4. Other slots: (0,C5) OrI4, (1,1A) OrI2, (1,1B) OrI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C5) OrI4 (same handler, different slot)
(0,0xC5) OrI4, (1,0x1A) OrI2, (1,0x1B) OrI2
Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x66107178, modOpcodes line 1407.
OrI2
(1,0x1A)not emitteddup of (0,C5)handler #194Integerconfirmed_handlerOr.Alias dispatch slot (1, 0x1A) for the canonical OrI2 at (1, 0x19); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes bitwise a | b.
Stack: [..., a:I2, b:I2] -> [..., (a | b):I2]
Operands are treated as a I2-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Or operator on I2-typed operands; Variant operands emit OrVar.
Dim a As Integer, b As Integer, c As Integer
c = a Or b
Encoding, evidence and notes
Encoding: FB 1A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is a duplicate slot of (0,C5) OrI4. Other slots: (0,C5) OrI4, (1,19) OrI2, (1,1B) OrI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C5) OrI4 (same handler, different slot)
(0,0xC5) OrI4, (1,0x19) OrI2, (1,0x1B) OrI2
Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x6610717C, modOpcodes line 1408.
OrI2
(1,0x1B)not emitteddup of (0,C5)handler #194Integerconfirmed_handlerOr.Alias dispatch slot (1, 0x1B) for the canonical OrI2 at (1, 0x19); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), pushes bitwise a | b.
Stack: [..., a:I2, b:I2] -> [..., (a | b):I2]
Operands are treated as a I2-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Or operator on I2-typed operands; Variant operands emit OrVar.
Dim a As Integer, b As Integer, c As Integer
c = a Or b
Encoding, evidence and notes
Encoding: FB 1B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is a duplicate slot of (0,C5) OrI4. Other slots: (0,C5) OrI4, (1,19) OrI2, (1,1A) OrI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C5) OrI4 (same handler, different slot)
(0,0xC5) OrI4, (1,0x19) OrI2, (1,0x1A) OrI2
Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x66107180, modOpcodes line 1409.
OrI4
(0,0xC5)emittedprimary of 4handler #194Integerconfirmed_msdocs43 corpus hitsOr.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a | b.
Stack: [..., a:I4, b:I4] -> [..., (a | b):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Or operator on I4-typed operands; Variant operands emit OrVar.
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = a Or b
End Sub
Encoding, evidence and notes
Encoding: C5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C5 OrI4
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A8DB C5 OrI4
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EAB7 C5 OrI4
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EACD C5 OrI4
43 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C5_OrI4.
Handler: 0x66105EB9, shared by 4 dispatch slots (real opcode #194). This is the primary slot. Other slots: (1,19) OrI2, (1,1A) OrI2, (1,1B) OrI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 43 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a Or b(1,0x19) OrI2, (1,0x1A) OrI2, (1,0x1B) OrI2
Description: draft, by claude-opus-4.7. Handler 0x66105EB9, dispatch slot 0x66107028, modOpcodes line 1406.
OrVar
(1,0x1F)emittedhandler #261Variantinferred_corpus11 corpus hitsOr.Pops two VBA Variant operands b and a (top is b), pushes bitwise a | b.
Stack: [..., a:Var, b:Var] -> [..., (a | b):Var]
Variant variant performs type coercion; for non-Boolean operands the operation is bitwise on the integer representation. Three-state logic (Null) is honored per VB6 rules.
Emitted for the Or operator on Var-typed operands; Variant operands emit OrVar.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Or b
End Sub
Encoding, evidence and notes
Encoding: FB 1F (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB1F 3CFF OrVar var_C4
Form1.Form_Load @ 0x479DC0 | 47AF51 FB1F 94FD OrVar var_26C
CPDFStream.Proc_455814 @ 0x455814 | 45587F FB1F D8FE OrVar var_128
CPDFStream.Proc_455814 @ 0x455814 | 455939 FB1F D8FE OrVar var_128
11 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_1F_OrVar.
Handler: 0x66105F92, unique to this slot (real opcode #261).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a Or bDescription: draft, by claude-opus-4.7. Handler 0x66105F92, dispatch slot 0x66107190, modOpcodes line 1410.
Logic_Xor
Exclusive OR
XorI4
(1,0x11)emitteddup of (1,12)handler #259Integerconfirmed_msdocsXor.Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a ^ b.
Stack: [..., a:I4, b:I4] -> [..., (a ^ b):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Xor operator on I4-typed operands; Variant operands emit XorVar.
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a Xor b
End Sub
Encoding, evidence and notes
Encoding: FB 11 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB11 XorI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_11_XorI4.
Handler: 0x6610AD12, shared by 3 dispatch slots (real opcode #259). This is a duplicate slot of (1,12) XorI4. Other slots: (1,12) XorI4, (1,13) XorI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,11):
Dim a As Byte, b As Byte, c As Byte : c = a Xor b - (1,12):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Xor b - (1,13):
Dim a As Long, b As Long, c As Long : c = a Xor b
Finding: Compiler selects this slot for Byte operands of Xor. Effective meaning: XorUI1.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,13) XorI4 (same handler, different slot)
Dim a As Long, b As Long, c As Long
c = a Xor b(1,0x12) XorI4, (1,0x13) XorI4
Description: draft, by claude-opus-4.7. Handler 0x6610AD12, dispatch slot 0x66107158, modOpcodes line 1401.
XorI4
(1,0x12)emittedprimary of 3handler #259Integerconfirmed_handler4 corpus hitsXor.Alias dispatch slot (1, 0x12) for the canonical XorI4 at (1, 0x11); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a ^ b.
Stack: [..., a:I4, b:I4] -> [..., (a ^ b):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Xor operator on I4-typed operands; Variant operands emit XorVar.
Public Sub Main()
Dim a As Boolean, b As Boolean, c As Boolean
c = a Xor b
End Sub
Encoding, evidence and notes
Encoding: FB 12 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB12 XorI4
Form2.Shellcode2Exe @ 0x470410 | 4705E9 FB12 XorI4
Form2.Shellcode2Exe @ 0x470410 | 47068B FB12 XorI4
modEscapes.Proc_4501DC @ 0x4501DC | 450259 FB12 XorI4
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_12_XorI4.
Handler: 0x6610AD12, shared by 3 dispatch slots (real opcode #259). This is the primary slot. Other slots: (1,11) XorI4, (1,13) XorI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,11):
Dim a As Byte, b As Byte, c As Byte : c = a Xor b - (1,12):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Xor b - (1,13):
Dim a As Long, b As Long, c As Long : c = a Xor b
Finding: Compiler selects this slot for Integer/Boolean operands of Xor. Effective meaning: XorI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (1,13) XorI4 (same handler, different slot)
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a Xor b(1,0x11) XorI4, (1,0x13) XorI4
Description: draft, by claude-opus-4.7. Handler 0x6610AD12, dispatch slot 0x6610715C, modOpcodes line 1402.
XorI4
(1,0x13)emitteddup of (1,12)handler #259Integerconfirmed_handler3 corpus hitsXor.Alias dispatch slot (1, 0x13) for the canonical XorI4 at (1, 0x11); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), pushes bitwise a ^ b.
Stack: [..., a:I4, b:I4] -> [..., (a ^ b):I4]
Operands are treated as a I4-width integer; the operation is bit-parallel. No overflow is possible.
Emitted for the Xor operator on I4-typed operands; Variant operands emit XorVar.
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a Xor b
End Sub
Encoding, evidence and notes
Encoding: FB 13 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB13 XorI4
modCrc.Proc_446CFC @ 0x446CFC | 446D6D FB13 XorI4
modCrc.Proc_44821C @ 0x44821C | 44827C FB13 XorI4
modCrc.Proc_44821C @ 0x44821C | 4482A7 FB13 XorI4
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_13_XorI4.
Handler: 0x6610AD12, shared by 3 dispatch slots (real opcode #259). This is a duplicate slot of (1,12) XorI4. Other slots: (1,11) XorI4, (1,12) XorI4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,11):
Dim a As Byte, b As Byte, c As Byte : c = a Xor b - (1,12):
Dim a As Boolean, b As Boolean, c As Boolean : c = a Xor b - (1,13):
Dim a As Long, b As Long, c As Long : c = a Xor b
Finding: Compiler selects this slot for Long and wider operands of Xor.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a Xor b(1,0x11) XorI4, (1,0x12) XorI4
Description: draft, by claude-opus-4.7. Handler 0x6610AD12, dispatch slot 0x66107160, modOpcodes line 1403.
XorVar
(1,0x17)emittedhandler #260Variantinferred_corpusXor); result Variant in a temporary.Pops two Variants, applies bitwise exclusive-or (Xor) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when either operand of bitwise exclusive-or (Xor) is a Variant.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Xor b
End Sub
Encoding, evidence and notes
Encoding: FB 17 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB17 3CFF XorVar var_C4
FB17 3CFF XorVar var_C4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_17_XorVar.
Handler: 0x6610AE1F, unique to this slot (real opcode #260).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Xor b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AE1F, dispatch slot 0x66107170, modOpcodes line 1404.
Loop_ExitFor
Exit For
ExitForAryVar
(3,0xCE)emittedhandler #571Control flowinferred_corpus3 corpus hitsExit For out of a For Each loop over an array, with a Variant control variable.Releases the iteration state held in %a and jumps to %L, the first instruction after the loop.
Emitted for Exit For inside For Each over an array, with a Variant control variable.
Public Sub Main()
Dim a(5) As Object, x As Variant
For Each x In a
Exit For
Next
End Sub
Encoding, evidence and notes
Encoding: FD CE (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FDCE 3CFF1F00 ExitForAryVar var_C4 loc_40147B
CApplyFilters.ApplyFilters @ 0x4626A4 | 46271F FDCE 48FFC902 ExitForAryVar var_B8 loc_46296D
CApplyFilters.ApplyFilters @ 0x4626A4 | 4628F5 FDCE 48FFC902 ExitForAryVar var_B8 loc_46296D
CApplyFilters.ApplyFilters @ 0x4626A4 | 46295C FDCE 48FFC902 ExitForAryVar var_B8 loc_46296D
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CE_ExitForAryVar.
Handler: 0x6610A358, unique to this slot (real opcode #571).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a(3) As Long, x As Variant
For Each x In a
Exit For
NextDescription: draft, by claude-opus-5-5. Handler 0x6610A358, dispatch slot 0x66107C4C, modOpcodes line 609.
ExitForCollObj
(3,0xCB)emitteddup of (3,CD)handler #570Control flowinferred_corpusExit For out of a For Each over a collection whose control variable is a specific class.Public Sub Main()
Dim c As Object, x As Variant
For Each x In c
Exit For
Next
End Sub
Encoding, evidence and notes
Encoding: FD CB (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FDCB 64FF1B00 ExitForCollObj var_9C loc_401467
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CB_ExitForCollObj.
Handler: 0x6610A318, shared by 3 dispatch slots (real opcode #570). This is a duplicate slot of (3,CD) ExitForCollObj. Other slots: (3,CC) ExitForCollObj, (3,CD) ExitForCollObj.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (3,CB):
Dim c As Object, x As Variant : For Each x In c : Exit For : Next - (3,CC):
Dim c As New Collection, x As Object : For Each x In c : Exit For : Next - (3,CD):
Dim c As New Collection, x As CThing : For Each x In c : Exit For : Next
Finding: Exit For inside For Each over a collection, control variable typed Variant.
(3,0xCC) ExitForCollObj, (3,0xCD) ExitForCollObj
Description: none. Handler 0x6610A318, dispatch slot 0x66107C40, modOpcodes line 606.
ExitForCollObj
(3,0xCC)emitteddup of (3,CD)handler #570Control flowconfirmed_handlerExit For out of a For Each over a collection whose control variable is a specific class.Public Sub Main()
Dim c As New Collection, x As Object
For Each x In c
Exit For
Next
End Sub
Encoding, evidence and notes
Encoding: FD CC (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FDCC 70FF1E00 ExitForCollObj var_90 loc_40149E
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CC_ExitForCollObj.
Handler: 0x6610A318, shared by 3 dispatch slots (real opcode #570). This is a duplicate slot of (3,CD) ExitForCollObj. Other slots: (3,CB) ExitForCollObj, (3,CD) ExitForCollObj.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (3,CB):
Dim c As Object, x As Variant : For Each x In c : Exit For : Next - (3,CC):
Dim c As New Collection, x As Object : For Each x In c : Exit For : Next - (3,CD):
Dim c As New Collection, x As CThing : For Each x In c : Exit For : Next
Finding: Exit For inside For Each over a collection, control variable typed Object.
(3,0xCB) ExitForCollObj, (3,0xCD) ExitForCollObj
Description: none. Handler 0x6610A318, dispatch slot 0x66107C44, modOpcodes line 607.
ExitForCollObj
(3,0xCD)emittedprimary of 3handler #570Control flowconfirmed_handler11 corpus hitsExit For out of a For Each over a collection whose control variable is a specific class.Releases the enumerator held in %a (and the current element reference) and jumps to %L.
Emitted for Exit For inside For Each x In coll where x is typed as a specific class or control type. (3,CB) is used for a Variant control variable and (3,CC) for Object; all three share one handler.
Public Sub Main()
Dim c As New Collection, x As CThing
For Each x In c
Exit For
Next
End Sub
' ---- CThing.cls
Encoding, evidence and notes
Encoding: FD CD (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FDCD 70FF2200 ExitForCollObj var_90 loc_4016DE
Form1.mnuWipeStream_Click @ 0x46D520 | 46D646 FDCD B4FE3E01 ExitForCollObj var_14C loc_46D65E
Form1.cmdDecode_Click @ 0x4775C0 | 477DFF FDCD C4FE5408 ExitForCollObj var_13C loc_477E14
Form1.lvSearch_ItemClick(ByVal Item As ListItem) @ 0x44F68C | 44F74A FDCD 48FFD300 ExitForCollObj var_B8 loc_44F75F
11 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CD_ExitForCollObj.
Handler: 0x6610A318, shared by 3 dispatch slots (real opcode #570). This is the primary slot. Other slots: (3,CB) ExitForCollObj, (3,CC) ExitForCollObj.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (3,CB):
Dim c As Object, x As Variant : For Each x In c : Exit For : Next - (3,CC):
Dim c As New Collection, x As Object : For Each x In c : Exit For : Next - (3,CD):
Dim c As New Collection, x As CThing : For Each x In c : Exit For : Next
Finding: Exit For inside For Each over a collection, control variable typed as a specific class / control.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 11 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As New Collection, x As Collection
For Each x In c
Exit For
Next(3,0xCB) ExitForCollObj, (3,0xCC) ExitForCollObj
Description: draft, by claude-opus-5-5. Handler 0x6610A318, dispatch slot 0x66107C48, modOpcodes line 608.
ExitForVar
(3,0xCF)emittedhandler #572Control flowinferred_corpusExit For out of a For Each over a Variant-held collection/array.Releases the enumerator/iteration state held in %a and jumps to %L.
Emitted for Exit For inside For Each x In v where v As Variant.
Public Sub Main()
Dim c As Variant, x As Variant
For Each x In c
Exit For
Next
End Sub
Encoding, evidence and notes
Encoding: FD CF (lead byte FD selects table 3), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FDCF 4CFF1B00 ExitForVar var_B4 loc_401467
FDCF 4CFF1B00 ExitForVar var_B4 loc_401467
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_CF_ExitForVar.
Handler: 0x6610A348, unique to this slot (real opcode #572).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As Variant, x As Variant
For Each x In c
Exit For
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A348, dispatch slot 0x66107C50, modOpcodes line 610.
Loop_For
FOR counter init
ForCy
(4,0x67)emittedhandler #625Currencyinferred_corpusFor loop with a Currency counter.Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit] -> [...]
Emitted at the head of For i = a To b where i is Currency.
Dim gi As Currency
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 67 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE67 68FF1B00 ForCy var_98 loc_401467
FE67 68FF1B00 ForCy var_98 loc_401467
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_67_ForCy.
Handler: 0x66109F86, unique to this slot (real opcode #625).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Currency
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109F86, dispatch slot 0x66107EB0, modOpcodes line 573.
ForI2
(4,0x63)emittedhandler #621Integerinferred_corpus3 corpus hitsFor loop with a Integer counter.Pops the limit and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.
Stack: [..., start, limit] -> [...]
Emitted at the head of For i = a To b where i is Integer. A loop with Step uses the matching ForStep form. The paired Next opcode closes the loop.
Dim gi As Integer
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 63 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE63 74FF1900 ForI2 var_8C loc_401465
Form1.LoadPlugins @ 0x4644FC | 464623 FE63 9EFEAB02 ForI2 var_162 loc_4647A7
Form1.DoEventsFor @ 0x44256C | 442583 FE63 54FF2E00 ForI2 var_AC loc_44259A
modCrc.Proc_446CFC @ 0x446CFC | 446D25 FE63 6CFFAE00 ForI2 var_94 loc_446DAA
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_63_ForI2.
Handler: 0x66105764, unique to this slot (real opcode #621).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Integer, n As Long
For i = 1 To 5
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x66105764, dispatch slot 0x66107EA0, modOpcodes line 569.
ForI4
(4,0x64)emittedhandler #622Integerinferred_corpus16 corpus hitsForI4).Sets up loop state for a For counter loop. Pops the limit (and step, in ForStep* variants) and the initial counter from the stack; stores them in the loop frame; evaluates the entry condition and either branches into the body or to the loop exit.
Operand %l is the exit branch target.
Emitted at the head of every For ... Next loop; suffix matches the counter's type.
Dim gi As Long
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 64 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE64 70FF1F00 ForI4 var_90 loc_40146B
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46EFF8 FE64 04FE0604 ForI4 var_1FC loc_46F012
Form1.mnuExploitScan_Click @ 0x46CF80 | 46CFE1 FE64 38FF4501 ForI4 var_C8 loc_46D0C5
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D12C FE64 E4FE7802 ForI4 var_11C loc_46D1F8
16 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_64_ForI4.
Handler: 0x66105837, unique to this slot (real opcode #622).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Long
For i = 0 To 9
' body
Next iDescription: draft, by claude-opus-4.7. Handler 0x66105837, dispatch slot 0x66107EA4, modOpcodes line 570.
ForR4
(4,0x65)emittedhandler #623Floating pointinferred_corpusFor loop with a Single counter.Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit] -> [...]
Emitted at the head of For i = a To b where i is Single.
Dim gi As Single
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 65 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE65 70FF1B00 ForR4 var_90 loc_401467
FE65 70FF1B00 ForR4 var_90 loc_401467
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_65_ForR4.
Handler: 0x66109ED8, unique to this slot (real opcode #623).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Single
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109ED8, dispatch slot 0x66107EA8, modOpcodes line 571.
ForR8
(4,0x66)emittedhandler #624Floating pointinferred_corpusFor loop with a Double counter.Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit] -> [...]
Emitted at the head of For i = a To b where i is Double.
Dim gi As Double
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 66 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE66 68FF1B00 ForR8 var_98 loc_401467
FE66 68FF1B00 ForR8 var_98 loc_401467
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_66_ForR8.
Handler: 0x66109F46, unique to this slot (real opcode #624).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Double
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109F46, dispatch slot 0x66107EAC, modOpcodes line 572.
ForStepCy
(4,0x6F)emittedhandler #632Currencyinferred_corpusFor loop with a Currency counter and explicit Step.Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Currency.
Public Sub Main()
Dim i As Currency, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 6F (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE6F 60FF1A00 ForStepCy var_A0 loc_401466
FE6F 60FF1A00 ForStepCy var_A0 loc_401466
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6F_ForStepCy.
Handler: 0x66109F8E, unique to this slot (real opcode #632).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim i As Currency, n As Long
For i = 9 To 1 Step -1
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109F8E, dispatch slot 0x66107ED0, modOpcodes line 580.
ForStepI2
(4,0x6B)emittedhandler #628Integerinferred_corpus1 corpus hitsFor loop with a Integer counter and an explicit Step.Pops the limit, the step and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Integer. Loops without Step use the non-Step form. The paired Next opcode closes the loop.
Public Sub Main()
Dim i As Integer, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 6B (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE6B 70FF1700 ForStepI2 var_90 loc_401463
modCrc.Proc_446CFC @ 0x446CFC | 446D3B FE6B 68FF9900 ForStepI2 var_98 loc_446D95
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6B_ForStepI2.
Handler: 0x661057C2, unique to this slot (real opcode #628).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Integer, n As Long
For i = 10 To 1 Step -2
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x661057C2, dispatch slot 0x66107EC0, modOpcodes line 576.
ForStepI4
(4,0x6C)emittedhandler #629Integerinferred_corpus7 corpus hitsFor loop with a Long counter and an explicit Step.Pops the limit, the step and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Long. Loops without Step use the non-Step form. The paired Next opcode closes the loop.
Public Sub Main()
Dim i As Long, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 6C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE6C 6CFF2000 ForStepI4 var_94 loc_40146C
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 45685A FE6C 3CFF4A01 ForStepI4 var_C4 loc_4568AE
Form1.mnuHideUnselected_Click @ 0x44AA74 | 44AABA FE6C 54FFD900 ForStepI4 var_AC loc_44AB4D
Form1.mnuHideDups_Click @ 0x4629E4 | 462A7D FE6C 44FF1702 ForStepI4 var_BC loc_462BFB
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6C_ForStepI4.
Handler: 0x6610583B, unique to this slot (real opcode #629).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Long, n As Long
For i = 10 To 1 Step -2
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x6610583B, dispatch slot 0x66107EC4, modOpcodes line 577.
ForStepR4
(4,0x6D)emittedhandler #630Floating pointinferred_corpusFor loop with a Single counter and explicit Step.Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Single.
Public Sub Main()
Dim i As Single, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 6D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE6D 6CFF1A00 ForStepR4 var_94 loc_401466
FE6D 6CFF1A00 ForStepR4 var_94 loc_401466
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6D_ForStepR4.
Handler: 0x66109EDC, unique to this slot (real opcode #630).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim i As Single, n As Long
For i = 9 To 1 Step -1
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109EDC, dispatch slot 0x66107EC8, modOpcodes line 578.
ForStepR8
(4,0x6E)emittedhandler #631Floating pointinferred_corpusFor loop with a Double counter and explicit Step.Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Double.
Public Sub Main()
Dim i As Double, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 6E (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE6E 60FF1A00 ForStepR8 var_A0 loc_401466
FE6E 60FF1A00 ForStepR8 var_A0 loc_401466
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6E_ForStepR8.
Handler: 0x66109F4A, unique to this slot (real opcode #631).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim i As Double, n As Long
For i = 9 To 1 Step -1
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109F4A, dispatch slot 0x66107ECC, modOpcodes line 579.
ForStepUI1
(4,0x6A)emittedhandler #627Integerinferred_corpusFor loop with a Byte counter and explicit Step.Pops the limit, the step and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Byte.
Public Sub Main()
Dim i As Byte, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 6A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE6A 70FF1E00 ForStepUI1 var_90 loc_40146A
FE6A 70FF1E00 ForStepUI1 var_90 loc_40146A
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_6A_ForStepUI1.
Handler: 0x66109E41, unique to this slot (real opcode #627).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim i As Byte, n As Long
For i = 9 To 1 Step -1
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109E41, dispatch slot 0x66107EBC, modOpcodes line 575.
ForStepVar
(4,0x70)emittedhandler #633Variantinferred_corpus7 corpus hitsFor loop with a Variant counter and an explicit Step.Pops the limit, the step and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.
Stack: [..., start, limit, step] -> [...]
Emitted at the head of For i = a To b Step s where i is Variant. Loops without Step use the non-Step form. The paired Next opcode closes the loop.
Public Sub Main()
Dim i As Variant, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 70 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE70 18FF2100 ForStepVar var_E8 loc_40146D
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D289 FE70 B0FEB001 ForStepVar var_150 loc_45D310
modEscapes.Proc_44C174 @ 0x44C174 | 44C194 FE70 ECFE6E00 ForStepVar var_114 loc_44C1E2
modEscapes.Proc_46074C @ 0x46074C | 4608DC FE70 CCFE0502 ForStepVar var_134 loc_460951
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_70_ForStepVar.
Handler: 0x661058AF, unique to this slot (real opcode #633).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Variant, n As Long
For i = 10 To 1 Step -2
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x661058AF, dispatch slot 0x66107ED4, modOpcodes line 581.
ForUI1
(4,0x62)emittedhandler #620Integerinferred_corpusFor loop with a Byte counter.Pops the limit and the start value, stores the loop state in the frame block at %a, assigns the counter and evaluates the entry test. If the loop must not run at all it jumps to %L.
Stack: [..., start, limit] -> [...]
Emitted at the head of For i = a To b where i is Byte.
Dim gi As Byte
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 62 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE62 74FF1E00 ForUI1 var_8C loc_40146A
FE62 74FF1E00 ForUI1 var_8C loc_40146A
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_62_ForUI1.
Handler: 0x66109E3D, unique to this slot (real opcode #620).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Byte
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109E3D, dispatch slot 0x66107E9C, modOpcodes line 568.
ForVar
(4,0x68)emittedhandler #626Variantinferred_corpus40 corpus hitsFor loop with a Variant counter.Pops the limit and the start value, initialises the counter and the loop-state block at %a, and jumps to %L (past the loop) if the body must not run.
Stack: [..., start, limit] -> [...]
Emitted at the head of For i = a To b where i is Variant. A loop with Step uses the matching ForStep form. The paired Next opcode closes the loop.
Dim gi As Variant
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 68 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE68 28FF2000 ForVar var_D8 loc_401470
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE0E FE68 C8FE5902 ForVar var_138 loc_45EF0D
fso.Proc_467FC4 @ 0x467FC4 | 468033 FE68 E0FE6502 ForVar var_120 loc_468229
fso.Proc_461D10 @ 0x461D10 | 461D91 FE68 E8FEAA02 ForVar var_118 loc_461FBA
40 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_68_ForVar.
Handler: 0x6610589F, unique to this slot (real opcode #626).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Variant, n As Long
For i = 1 To 5
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x6610589F, dispatch slot 0x66107EB4, modOpcodes line 574.
Loop_ForEach
For Each init
ForEachAryVar
(4,0x76)emittedhandler #638Arrayinferred_corpus12 corpus hitsFor Each loop over an array, with a Variant control variable.Initialises iteration (an array cursor, or the collection's _NewEnum IEnumVARIANT) in the loop block at %a, fetches the first element into the control variable, or jumps to %L (past the loop) if there is none.
Emitted at the head of For Each x In y over an array, with a Variant control variable. The control variable's type and the container kind select the slot (arrays: ForEachAryVar; collections: ForEachCollVar for Variant, ForEachCollAd for Object, ForEachCollObj for a specific class).
Public Sub Main()
Dim a(5) As Object, x As Variant
For Each x In a
Next
End Sub
Encoding, evidence and notes
Encoding: FE 76 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE76 3CFF09001900 ForEachAryVar var_C4 0x9 loc_401475
Form1.Form_Load @ 0x479DC0 | 47A3C1 FE76 ACFD0C002E07 ForEachAryVar var_254 0xC loc_47A4EE
fso.Proc_44E8D4 @ 0x44E8D4 | 44E98E FE76 00FF0800F600 ForEachAryVar var_100 0x8 loc_44E9CA
Form2.Form_Unload (Cancel As Integer) @ 0x460A60 | 460CE1 FE76 B0FE0C00AD02 ForEachAryVar var_150 0xC loc_460D0D
12 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_76_ForEachAryVar.
Handler: 0x6610A2E2, unique to this slot (real opcode #638).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Dim a(3) As Long, x As Variant
For Each x In a
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x6610A2E2, dispatch slot 0x66107EEC, modOpcodes line 556.
ForEachCollAd
(4,0x74)emittedhandler #636Object / COMinferred_corpusFor Each over a collection with an Object-typed control variable.Pops the collection, obtains its enumerator (_NewEnum) and stores it in the loop slot %a. It fetches the first item into the control variable as an object reference; if there is none, it jumps to %L (loop exit).
Emitted for For Each x In coll where x As Object (or a class).
Public Sub Main()
Dim c As New Collection, x As Object
For Each x In c
Next
End Sub
Encoding, evidence and notes
Encoding: FE 74 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE74 70FF1800 ForEachCollAd var_90 loc_401498
FE74 70FF1800 ForEachCollAd var_90 loc_401498
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_74_ForEachCollAd.
Handler: 0x661059AD, unique to this slot (real opcode #636).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As New Collection, x As Object
For Each x In c
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x661059AD, dispatch slot 0x66107EE4, modOpcodes line 562.
ForEachCollObj
(4,0x88)emittedhandler #642Object / COMinferred_corpus74 corpus hitsFor Each loop over a collection, with the control variable typed as a specific class (or Object).Initialises iteration (an array cursor, or the collection's _NewEnum IEnumVARIANT) in the loop block at %a, fetches the first element into the control variable, or jumps to %L (past the loop) if there is none.
Emitted at the head of For Each x In y over a collection, with the control variable typed as a specific class (or Object). The control variable's type and the container kind select the slot (arrays: ForEachAryVar; collections: ForEachCollVar for Variant, ForEachCollAd for Object, ForEachCollObj for a specific class).
Public Sub Main()
Dim c As New Collection, x As CThing
For Each x In c
Next
End Sub
' ---- CThing.cls
Encoding, evidence and notes
Encoding: FE 88 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE88 70FF01001C00 ForEachCollObj var_90 0x1 loc_4016D8
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FC5 FE88 58FF37005500 ForEachCollObj var_A8 0x37 loc_449FF9
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA0F FE88 C8FE3700CA01 ForEachCollObj var_138 0x37 loc_45DB1A
Form1.mnuExtractURI_Click @ 0x45774C | 457776 FE88 3CFF37004C01 ForEachCollObj var_C4 0x37 loc_457898
74 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_88_ForEachCollObj.
Handler: 0x661059BF, unique to this slot (real opcode #642).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 74 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Dim c As New Collection, x As Collection
For Each x In c
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x661059BF, dispatch slot 0x66107F34, modOpcodes line 557.
ForEachCollVar
(4,0x72)emittedhandler #634Object / COMinferred_corpus14 corpus hitsFor Each loop over a collection or object, with a Variant control variable.Initialises iteration (an array cursor, or the collection's _NewEnum IEnumVARIANT) in the loop block at %a, fetches the first element into the control variable, or jumps to %L (past the loop) if there is none.
Emitted at the head of For Each x In y over a collection or object, with a Variant control variable. The control variable's type and the container kind select the slot (arrays: ForEachAryVar; collections: ForEachCollVar for Variant, ForEachCollAd for Object, ForEachCollObj for a specific class).
Public Sub Main()
Dim c As New Collection, x As Variant
For Each x In c
Next
out:
End Sub
Encoding, evidence and notes
Encoding: FE 72 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE72 64FF1800 ForEachCollVar var_9C loc_401498
Form1.Shutdown @ 0x442740 | 442762 FE72 50FF4C00 ForEachCollVar var_B0 loc_44278C
Form2.mnuRenameFunc_Click @ 0x471130 | 471271 FE72 60FE9801 ForEachCollVar var_1A0 loc_4712C8
CFunc.ApplyOverrides @ 0x44FD88 | 44FDAE FE72 60FF0501 ForEachCollVar var_A0 loc_44FE8D
14 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_72_ForEachCollVar.
Handler: 0x6610A2A4, unique to this slot (real opcode #634).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Dim c As New Collection, x As Variant
For Each x In c
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x6610A2A4, dispatch slot 0x66107EDC, modOpcodes line 561.
ForEachVar
(4,0x89)emittedhandler #643Object / COMinferred_corpus7 corpus hitsForEachVar).Sets up enumeration over a Collection, Variant, or array. Acquires the IEnumVARIANT interface (for Collections / objects implementing _NewEnum) or array iterator state, fetches the first element into the iteration variable, and branches to the loop body or to the exit if the source is empty.
Emitted at every For Each loop head; variant chosen by the iteration variable's type.
Public Sub Main()
Dim c As Variant, x As Variant
For Each x In c
Next
End Sub
Encoding, evidence and notes
Encoding: FE 89 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE89 4CFF1500 ForEachVar var_B4 loc_401461
Form2.mnuCopyFuncsNames_Click @ 0x456D48 | 456DA4 FE89 04FFB100 ForEachVar var_FC loc_456DF9
CFunc.ParseAsGlobal @ 0x468430 | 46848B FE89 F4FEBF02 ForEachVar var_10C loc_4686EF
CFunc.ParseSelf @ 0x47181C | 47192D FE89 80FE7B01 ForEachVar var_180 loc_471997
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_89_ForEachVar.
Handler: 0x6610A29D, unique to this slot (real opcode #643).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
For Each item In coll
' body
NextDescription: draft, by claude-opus-4.7. Handler 0x6610A29D, dispatch slot 0x66107F38, modOpcodes line 563.
ForEachVarFree
(4,0x8A)not emittedhandler #644Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 8A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A286, unique to this slot (real opcode #644).
Description: none. Handler 0x6610A286, dispatch slot 0x66107F3C, modOpcodes line 564.
Loop_Next
FOR counter advance/test
NextI2
(0,0x64)emittedprimary of 2handler #97Integerconfirmed_handler3 corpus hitsNext of a For loop with a Integer counter.Adds the increment (1) to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.
Emitted at Next for a Integer counter without Step. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.
Dim gi As Integer
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: 64, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 64 74FF0F00 NextI2 var_8C loc_40145B
Form1.LoadPlugins @ 0x4644FC | 4647A2 64 9EFE2D01 NextI2 var_162 loc_464629
Form1.DoEventsFor @ 0x44256C | 442595 64 54FF1D00 NextI2 var_AC loc_442589
modCrc.Proc_446CFC @ 0x446CFC | 446DA5 64 6CFF2F00 NextI2 var_94 loc_446D2B
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_64_NextI2.
Handler: 0x66105793, shared by 2 dispatch slots (real opcode #97). This is the primary slot. Other slots: (4,79) NextI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Integer, n As Long
For i = 1 To 5
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x66105793, dispatch slot 0x66106EA4, modOpcodes line 598.
NextI2
(4,0x79)not emitteddup of (0,64)handler #97Integerinferred_corpusEncoding, evidence and notes
Encoding: FE 79 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105793, shared by 2 dispatch slots (real opcode #97). This is a duplicate slot of (0,64) NextI2. Other slots: (0,64) NextI2.
Description: none. Handler 0x66105793, dispatch slot 0x66107EF8, modOpcodes line 584.
NextI4
(0,0x66)emittedprimary of 2handler #99Integerconfirmed_handler16 corpus hitsNext of a For loop with a Long counter.Adds the increment (1) to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.
Emitted at Next for a Long counter without Step. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.
Dim gi As Long
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: 66, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 66 70FF1500 NextI4 var_90 loc_401461
Form1.mnuUpdateCurrent_Click @ 0x46EC0C | 46F00D 66 04FEF203 NextI4 var_1FC loc_46EFFE
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D0C0 66 38FF6700 NextI4 var_C8 loc_46CFE7
Form1.mnuExploitScan_Click @ 0x46CF80 | 46D1F3 66 E4FEB201 NextI4 var_11C loc_46D132
16 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_66_NextI4.
Handler: 0x66105877, shared by 2 dispatch slots (real opcode #99). This is the primary slot. Other slots: (4,7A) NextI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 16 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Long, n As Long
For i = 1 To 5
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x66105877, dispatch slot 0x66106EAC, modOpcodes line 600.
NextI4
(4,0x7A)not emitteddup of (0,66)handler #99Integerinferred_corpusEncoding, evidence and notes
Encoding: FE 7A (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105877, shared by 2 dispatch slots (real opcode #99). This is a duplicate slot of (0,66) NextI4. Other slots: (0,66) NextI4.
Description: none. Handler 0x66105877, dispatch slot 0x66107EFC, modOpcodes line 585.
NextR8
(4,0x7C)not emitteddup of (0,69)handler #102Floating pointinferred_corpusNext for a Double loop counter with Step.Encoding, evidence and notes
Encoding: FE 7C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109F6E, shared by 3 dispatch slots (real opcode #102). This is a duplicate slot of (0,69) NextStepR8. Other slots: (0,69) NextStepR8, (4,84) NextR8.
(0,0x69) NextStepR8, (4,0x84) NextR8
Description: none. Handler 0x66109F6E, dispatch slot 0x66107F04, modOpcodes line 587.
NextR8
(4,0x84)not emitteddup of (0,69)handler #102Floating pointconfirmed_handlerNext for a Double loop counter with Step.Encoding, evidence and notes
Encoding: FE 84 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109F6E, shared by 3 dispatch slots (real opcode #102). This is a duplicate slot of (0,69) NextStepR8. Other slots: (0,69) NextStepR8, (4,7C) NextR8.
(0,0x69) NextStepR8, (4,0x7C) NextR8
Description: none. Handler 0x66109F6E, dispatch slot 0x66107F24, modOpcodes line 594.
NextStepCy
(0,0x6A)emittedprimary of 3handler #103Currencyconfirmed_handlerNext for a Currency loop counter with Step.Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.
Paired with the corresponding ForStepCy. Phase 4: the compiler emits this slot for Currency counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.
Dim gi As Currency
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: 6A, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 6A 68FF1100 NextStepCy var_98 loc_40145D
6A 68FF1100 NextStepCy var_98 loc_40145D
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_6A_NextStepCy.
Handler: 0x66109FDE, shared by 3 dispatch slots (real opcode #103). This is the primary slot. Other slots: (4,7D) NextStepCy, (4,85) NextStepCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Currency
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub(4,0x7D) NextStepCy, (4,0x85) NextStepCy
Description: draft, by claude-opus-5-5. Handler 0x66109FDE, dispatch slot 0x66106EBC, modOpcodes line 604.
NextStepCy
(4,0x7D)not emitteddup of (0,6A)handler #103Currencyinferred_corpusNext for a Currency loop counter with Step.Encoding, evidence and notes
Encoding: FE 7D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109FDE, shared by 3 dispatch slots (real opcode #103). This is a duplicate slot of (0,6A) NextStepCy. Other slots: (0,6A) NextStepCy, (4,85) NextStepCy.
(0,0x6A) NextStepCy, (4,0x85) NextStepCy
Description: none. Handler 0x66109FDE, dispatch slot 0x66107F08, modOpcodes line 588.
NextStepCy
(4,0x85)not emitteddup of (0,6A)handler #103Currencyconfirmed_handlerNext for a Currency loop counter with Step.Encoding, evidence and notes
Encoding: FE 85 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109FDE, shared by 3 dispatch slots (real opcode #103). This is a duplicate slot of (0,6A) NextStepCy. Other slots: (0,6A) NextStepCy, (4,7D) NextStepCy.
(0,0x6A) NextStepCy, (4,0x7D) NextStepCy
Description: none. Handler 0x66109FDE, dispatch slot 0x66107F28, modOpcodes line 595.
NextStepI2
(0,0x65)emittedprimary of 2handler #98Integerconfirmed_handler1 corpus hitsNext of a For loop with a Integer counter and an explicit Step.Adds the step to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.
Emitted at Next for a Integer counter when the loop has a Step clause. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.
Public Sub Main()
Dim i As Integer, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: 65, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 65 70FF0F00 NextStepI2 var_90 loc_40145B
modCrc.Proc_446CFC @ 0x446CFC | 446D90 65 68FF4500 NextStepI2 var_98 loc_446D41
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_65_NextStepI2.
Handler: 0x661057E1, shared by 2 dispatch slots (real opcode #98). This is the primary slot. Other slots: (4,81) NextStepI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Integer, n As Long
For i = 10 To 1 Step -2
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x661057E1, dispatch slot 0x66106EA8, modOpcodes line 599.
NextStepI2
(4,0x81)not emitteddup of (0,65)handler #98Integerinferred_corpusNext of a For loop with a Integer counter and an explicit Step.Encoding, evidence and notes
Encoding: FE 81 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661057E1, shared by 2 dispatch slots (real opcode #98). This is a duplicate slot of (0,65) NextStepI2. Other slots: (0,65) NextStepI2.
Description: none. Handler 0x661057E1, dispatch slot 0x66107F18, modOpcodes line 591.
NextStepI4
(0,0x67)emittedprimary of 2handler #100Integerconfirmed_handler7 corpus hitsNext of a For loop with a Long counter and an explicit Step.Adds the step to the counter, tests it against the limit stored in the loop block %a, and jumps back to %L while the loop continues. Overflow raises error 6.
Emitted at Next for a Long counter when the loop has a Step clause. The compiler emits this table-0 slot; the table-4 slot of the same name is a never-emitted duplicate.
Public Sub Main()
Dim i As Long, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: 67, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 67 6CFF1800 NextStepI4 var_94 loc_401464
Form1.lv_KeyDown(ByRef KeyCode As Integer, ByVal Shift As Integer) @ 0x456764 | 4568A9 67 3CFFFC00 NextStepI4 var_C4 loc_456860
Form1.mnuHideUnselected_Click @ 0x44AA74 | 44AB48 67 54FF4C00 NextStepI4 var_AC loc_44AAC0
Form1.mnuHideDups_Click @ 0x4629E4 | 462BF6 67 44FF9F00 NextStepI4 var_BC loc_462A83
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_67_NextStepI4.
Handler: 0x66109EA5, shared by 2 dispatch slots (real opcode #100). This is the primary slot. Other slots: (4,82) NextStepI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
Dim i As Long, n As Long
For i = 10 To 1 Step -2
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x66109EA5, dispatch slot 0x66106EB0, modOpcodes line 601.
NextStepI4
(4,0x82)not emitteddup of (0,67)handler #100Integerinferred_corpusEncoding, evidence and notes
Encoding: FE 82 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109EA5, shared by 2 dispatch slots (real opcode #100). This is a duplicate slot of (0,67) NextStepI4. Other slots: (0,67) NextStepI4.
Description: none. Handler 0x66109EA5, dispatch slot 0x66107F1C, modOpcodes line 592.
NextStepR4
(0,0x68)emittedprimary of 3handler #101Floating pointconfirmed_handlerNext for a Single loop counter with Step.Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.
Paired with the corresponding ForStepR4. Phase 4: the compiler emits this slot for Single counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.
Dim gi As Single
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: 68, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 68 70FF1100 NextStepR4 var_90 loc_40145D
68 70FF1100 NextStepR4 var_90 loc_40145D
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_68_NextStepR4.
Handler: 0x66109F20, shared by 3 dispatch slots (real opcode #101). This is the primary slot. Other slots: (4,7B) NextStepR4, (4,83) NextStepR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Single
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub(4,0x7B) NextStepR4, (4,0x83) NextStepR4
Description: draft, by claude-opus-5-5. Handler 0x66109F20, dispatch slot 0x66106EB4, modOpcodes line 602.
NextStepR4
(4,0x7B)not emitteddup of (0,68)handler #101Floating pointinferred_corpusNext for a Single loop counter with Step.Encoding, evidence and notes
Encoding: FE 7B (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109F20, shared by 3 dispatch slots (real opcode #101). This is a duplicate slot of (0,68) NextStepR4. Other slots: (0,68) NextStepR4, (4,83) NextStepR4.
(0,0x68) NextStepR4, (4,0x83) NextStepR4
Description: none. Handler 0x66109F20, dispatch slot 0x66107F00, modOpcodes line 586.
NextStepR4
(4,0x83)not emitteddup of (0,68)handler #101Floating pointconfirmed_handlerNext for a Single loop counter with Step.Encoding, evidence and notes
Encoding: FE 83 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109F20, shared by 3 dispatch slots (real opcode #101). This is a duplicate slot of (0,68) NextStepR4. Other slots: (0,68) NextStepR4, (4,7B) NextStepR4.
(0,0x68) NextStepR4, (4,0x7B) NextStepR4
Description: none. Handler 0x66109F20, dispatch slot 0x66107F20, modOpcodes line 593.
NextStepR8
(0,0x69)emittedprimary of 3handler #102Floating pointinferred_corpusNext for a Double loop counter with Step.Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.
Paired with the corresponding ForStepR8. Phase 4: the compiler emits this slot for Double counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.
Dim gi As Double
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: 69, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: 69 68FF1100 NextStepR8 var_98 loc_40145D
69 68FF1100 NextStepR8 var_98 loc_40145D
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_69_NextStepR8.
Handler: 0x66109F6E, shared by 3 dispatch slots (real opcode #102). This is the primary slot. Other slots: (4,7C) NextR8, (4,84) NextR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Double
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub(4,0x7C) NextR8, (4,0x84) NextR8
Description: draft, by claude-opus-5-5. Handler 0x66109F6E, dispatch slot 0x66106EB8, modOpcodes line 603.
NextStepUI1
(4,0x80)emitteddup of (4,78)handler #640Integerinferred_corpusNext for a Byte loop counter with Step.Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.
Paired with the corresponding ForStepUI1. Phase 4: the compiler emits this slot for Byte counters even when no explicit Step was written; the lead-0 NextStep* slots are the general form.
Public Sub Main()
Dim i As Byte, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 80 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE80 70FF1500 NextStepUI1 var_90 loc_401461
FE80 70FF1500 NextStepUI1 var_90 loc_401461
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_80_NextStepUI1.
Handler: 0x66109E6D, shared by 2 dispatch slots (real opcode #640). This is a duplicate slot of (4,78) NextUI1. Other slots: (4,78) NextUI1.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (4,78):
Dim n As Long : For gi = 1 To 5 : Next - (4,80):
Dim i As Byte, n As Long : For i = 9 To 1 Step -1 : Next
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim i As Byte, n As Long
For i = 9 To 1 Step -1
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109E6D, dispatch slot 0x66107F14, modOpcodes line 590.
NextStepVar
(4,0x7E)emittedprimary of 2handler #641Variantinferred_corpus40 corpus hitsNextStepVar).Increments (or steps) the counter, re-evaluates the loop condition, and either branches back to the body or falls through past the loop.
Emitted at the Next of a For ... Next loop matching the counter's type.
Dim gi As Variant
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 7E (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE7E 28FF1500 NextStepVar var_D8 loc_401465
fso.Proc_45ECB4 @ 0x45ECB4 | 45EF07 FE7E C8FE6001 NextStepVar var_138 loc_45EE14
fso.Proc_467FC4 @ 0x467FC4 | 468223 FE7E E0FE7500 NextStepVar var_120 loc_468039
fso.Proc_461D10 @ 0x461D10 | 461FB4 FE7E E8FE8700 NextStepVar var_118 loc_461D97
40 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_7E_NextStepVar.
Handler: 0x661058DE, shared by 2 dispatch slots (real opcode #641). This is the primary slot. Other slots: (4,86) NextStepVar.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (4,7E):
Dim n As Long : For gi = 1 To 5 : Next - (4,86):
Dim i As Variant, n As Long : For i = 9 To 1 Step -1 : Next
Finding: Compiler selects this slot for a Variant For loop without Step. (4,86) is used with Step. Effective meaning: NextVar.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 40 occurrence(s) in PDFStreamDumper_p.exe.
For i = 0 To 9
' ...
Next i ' compiles to NextI4 (or NextStep* with explicit Step)Description: draft, by claude-opus-4.7. Handler 0x661058DE, dispatch slot 0x66107F0C, modOpcodes line 589.
NextStepVar
(4,0x86)emitteddup of (4,7E)handler #641Variantconfirmed_handler7 corpus hitsNextStepVar).Alias dispatch slot (4, 0x86) for the canonical NextStepVar at (4, 0x7E); semantics are identical.
Increments (or steps) the counter, re-evaluates the loop condition, and either branches back to the body or falls through past the loop.
Emitted at the Next of a For ... Next loop matching the counter's type.
Public Sub Main()
Dim i As Variant, n As Long
For i = 9 To 1 Step -1
Next
End Sub
Encoding, evidence and notes
Encoding: FE 86 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE86 18FF1800 NextStepVar var_E8 loc_401464
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D30A FE86 B0FE2F01 NextStepVar var_150 loc_45D28F
modEscapes.Proc_44C174 @ 0x44C174 | 44C1DC FE86 ECFE2600 NextStepVar var_114 loc_44C19A
modEscapes.Proc_46074C @ 0x46074C | 46094B FE86 CCFE9601 NextStepVar var_134 loc_4608E2
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_86_NextStepVar.
Handler: 0x661058DE, shared by 2 dispatch slots (real opcode #641). This is a duplicate slot of (4,7E) NextStepVar. Other slots: (4,7E) NextStepVar.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (4,7E):
Dim n As Long : For gi = 1 To 5 : Next - (4,86):
Dim i As Variant, n As Long : For i = 9 To 1 Step -1 : Next
Finding: Compiler selects this slot for a Variant For loop with Step.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (4,7E) NextStepVar (same handler, different slot) [compiles only without Option Explicit: undeclared names became Variants]
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
For i = 0 To 9
' ...
Next i ' compiles to NextI4 (or NextStep* with explicit Step)Description: draft, by claude-opus-4.7. Handler 0x661058DE, dispatch slot 0x66107F2C, modOpcodes line 596.
NextUI1
(4,0x78)emittedprimary of 2handler #640Integerinferred_corpusNext for a Byte loop counter.Adds the step to the counter (state in %a), tests against the limit and jumps back to the loop body at %L while the loop continues.
Paired with the corresponding ForUI1. Phase 4: the compiler emits this slot for Byte counters.
Dim gi As Byte
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End Sub
Encoding, evidence and notes
Encoding: FE 78 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE78 74FF1300 NextUI1 var_8C loc_40145F
FE78 74FF1300 NextUI1 var_8C loc_40145F
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_78_NextUI1.
Handler: 0x66109E6D, shared by 2 dispatch slots (real opcode #640). This is the primary slot. Other slots: (4,80) NextStepUI1.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (4,78):
Dim n As Long : For gi = 1 To 5 : Next - (4,80):
Dim i As Byte, n As Long : For i = 9 To 1 Step -1 : Next
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim gi As Byte
Public Sub Main()
Dim n As Long
For gi = 1 To 5
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109E6D, dispatch slot 0x66107EF4, modOpcodes line 583.
Loop_NextEach
For Each advance
NextEachAryVar
(4,0x77)emittedhandler #639Arrayinferred_corpus12 corpus hitsNext of a For Each loop over an array, with a Variant control variable.Fetches the next element into the control variable and jumps back to the body at %L. When the sequence is exhausted, releases the iteration state in %a and falls through.
Emitted at the Next of a For Each loop over an array, with a Variant control variable; it pairs with the matching ForEach slot.
Public Sub Main()
Dim a(5) As Object, x As Variant
For Each x In a
Next
End Sub
Encoding, evidence and notes
Encoding: FE 77 (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE77 3CFF09000E00 NextEachAryVar var_C4 0x9 loc_40146A
Form1.Form_Load @ 0x479DC0 | 47A4E6 FE77 ACFD0C000906 NextEachAryVar var_254 0xC loc_47A3C9
fso.Proc_44E8D4 @ 0x44E8D4 | 44E9C2 FE77 00FF0800C200 NextEachAryVar var_100 0x8 loc_44E996
Form2.Form_Unload (Cancel As Integer) @ 0x460A60 | 460D05 FE77 B0FE0C008902 NextEachAryVar var_150 0xC loc_460CE9
12 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_77_NextEachAryVar.
Handler: 0x6610A2FC, unique to this slot (real opcode #639).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Dim a(3) As Long, x As Variant
For Each x In a
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x6610A2FC, dispatch slot 0x66107EF0, modOpcodes line 559.
NextEachCollAd
(4,0x75)emittedhandler #637Object / COMinferred_corpusNext of a For Each over a collection with an Object-typed control variable.Fetches the next item from the enumerator in %a into the control variable (object reference). If one was obtained it jumps back to %L; otherwise it releases the enumerator and falls through.
Paired with ForEachCollAd.
Public Sub Main()
Dim c As New Collection, x As Object
For Each x In c
Next
End Sub
Encoding, evidence and notes
Encoding: FE 75 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE75 70FF0F00 NextEachCollAd var_90 loc_40148F
FE75 70FF0F00 NextEachCollAd var_90 loc_40148F
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_75_NextEachCollAd.
Handler: 0x6610A2CB, unique to this slot (real opcode #637).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim c As New Collection, x As Object
For Each x In c
Next
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A2CB, dispatch slot 0x66107EE8, modOpcodes line 565.
NextEachCollObj
(4,0x8B)emittedhandler #645Object / COMinferred_corpus74 corpus hitsNext of a For Each loop over a collection, with the control variable typed as a specific class (or Object).Fetches the next element into the control variable and jumps back to the body at %L. When the sequence is exhausted, releases the iteration state in %a and falls through.
Emitted at the Next of a For Each loop over a collection, with the control variable typed as a specific class (or Object); it pairs with the matching ForEach slot.
Public Sub Main()
Dim c As New Collection, x As CThing
For Each x In c
Next
End Sub
' ---- CThing.cls
Encoding, evidence and notes
Encoding: FE 8B (lead byte FE selects table 4), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %2 %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%2: immediate_word, 2 byte(s). 16-bit immediate.%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE8B 70FF01001100 NextEachCollObj var_90 0x1 loc_4016CD
Form1.mnuCopySearch_Click @ 0x449FA4 | 449FF1 FE8B 58FF37002900 NextEachCollObj var_A8 0x37 loc_449FCD
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DB12 FE8B C8FE3700C700 NextEachCollObj var_138 0x37 loc_45DA17
Form1.mnuExtractURI_Click @ 0x45774C | 457890 FE8B 3CFF37003200 NextEachCollObj var_C4 0x37 loc_45777E
74 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8B_NextEachCollObj.
Handler: 0x661059DB, unique to this slot (real opcode #645).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 74 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Dim c As New Collection, x As Collection
For Each x In c
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x661059DB, dispatch slot 0x66107F40, modOpcodes line 558.
NextEachCollVar
(4,0x73)emittedhandler #635Object / COMinferred_corpus14 corpus hitsNext of a For Each loop over a collection or object, with a Variant control variable.Fetches the next element into the control variable and jumps back to the body at %L. When the sequence is exhausted, releases the iteration state in %a and falls through.
Emitted at the Next of a For Each loop over a collection or object, with a Variant control variable; it pairs with the matching ForEach slot.
Public Sub Main()
Dim c As New Collection, x As Variant
For Each x In c
Next
out:
End Sub
Encoding, evidence and notes
Encoding: FE 73 (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE73 64FF0F00 NextEachCollVar var_9C loc_40148F
Form1.Shutdown @ 0x442740 | 442786 FE73 50FF2800 NextEachCollVar var_B0 loc_442768
Form2.mnuRenameFunc_Click @ 0x471130 | 4712C2 FE73 60FE4701 NextEachCollVar var_1A0 loc_471277
CFunc.ApplyOverrides @ 0x44FD88 | 44FE87 FE73 60FF2C00 NextEachCollVar var_A0 loc_44FDB4
14 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_73_NextEachCollVar.
Handler: 0x6610A2C4, unique to this slot (real opcode #635).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 14 occurrence(s) in PDFStreamDumper_p.exe.
Dim n As Long
Dim c As New Collection, x As Variant
For Each x In c
n = n + 1
NextDescription: draft, by claude-opus-5-5. Handler 0x6610A2C4, dispatch slot 0x66107EE0, modOpcodes line 566.
NextEachVar
(4,0x8C)emittedhandler #646Object / COMinferred_corpus7 corpus hitsNextEachVar).Fetches the next enumerated element; if exhausted, releases the enumerator and falls through past the loop, otherwise stores the element into the iteration variable and branches back to the body.
Emitted at the Next of every For Each loop.
Public Sub Main()
Dim c As Variant, x As Variant
For Each x In c
Next
End Sub
Encoding, evidence and notes
Encoding: FE 8C (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %L
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%L: branch_target_no_loc, 2 byte(s). 16-bit branch target (proc-relative), not added to vbdec's label list.
Observed: FE8C 4CFF0C00 NextEachVar var_B4 loc_401458
Form2.mnuCopyFuncsNames_Click @ 0x456D48 | 456DF3 FE8C 04FF6200 NextEachVar var_FC loc_456DAA
CFunc.ParseAsGlobal @ 0x468430 | 4686E9 FE8C F4FE6100 NextEachVar var_10C loc_468491
CFunc.ParseSelf @ 0x47181C | 471991 FE8C 80FE1701 NextEachVar var_180 loc_471933
7 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8C_NextEachVar.
Handler: 0x6610A2AB, unique to this slot (real opcode #646).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
For Each x In coll
' ...
Next ' -> NextEachCollObj / NextEachAryVarDescription: draft, by claude-opus-4.7. Handler 0x6610A2AB, dispatch slot 0x66107F44, modOpcodes line 597.
Math_Abs
Absolute value
FnAbsCy
(0,0xBE)emittedprimary of 2handler #187Currencyconfirmed_msdocsPops a of type 64-bit scaled-integer Currency (×10^4), pushes |a| of the same type.
Stack: [..., a:Cy] -> [..., |a|:Cy]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Currency-typed argument.
Public Sub Main()
Dim a As Currency, c As Currency
c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding: BE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BE FnAbsCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BE_FnAbsCy.
Handler: 0x6610ACE1, shared by 2 dispatch slots (real opcode #187). This is the primary slot. Other slots: (1,D8) FnAbsCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, c As Currency
c = Abs(a)Description: draft, by claude-opus-4.7. Handler 0x6610ACE1, dispatch slot 0x6610700C, modOpcodes line 1380.
FnAbsCy
(1,0xD8)not emitteddup of (0,BE)handler #187Currencyconfirmed_handlerAlias dispatch slot (1, 0xD8) for the canonical FnAbsCy at (0, 0xBE); semantics are identical.
Pops a of type 64-bit scaled-integer Currency (×10^4), pushes |a| of the same type.
Stack: [..., a:Cy] -> [..., |a|:Cy]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Currency-typed argument.
Dim a As Currency, c As Currency
c = Abs(a)
Encoding, evidence and notes
Encoding: FB D8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ACE1, shared by 2 dispatch slots (real opcode #187). This is a duplicate slot of (0,BE) FnAbsCy. Other slots: (0,BE) FnAbsCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BE) FnAbsCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610ACE1, dispatch slot 0x66107474, modOpcodes line 1425.
FnAbsI2
(0,0xBB)emittedprimary of 2handler #184Integerconfirmed_msdocsPops a of type 16-bit signed integer (VB6 Integer), pushes |a| of the same type.
Stack: [..., a:I2] -> [..., |a|:I2]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Integer-typed argument.
Public Sub Main()
Dim a As Integer, c As Integer
c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding: BB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BB FnAbsI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BB_FnAbsI2.
Handler: 0x6610ACA9, shared by 2 dispatch slots (real opcode #184). This is the primary slot. Other slots: (1,D4) FnAbsI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, c As Integer
c = Abs(a)Description: draft, by claude-opus-4.7. Handler 0x6610ACA9, dispatch slot 0x66107000, modOpcodes line 1377.
FnAbsI2
(1,0xD4)not emitteddup of (0,BB)handler #184Integerconfirmed_handlerAlias dispatch slot (1, 0xD4) for the canonical FnAbsI2 at (0, 0xBB); semantics are identical.
Pops a of type 16-bit signed integer (VB6 Integer), pushes |a| of the same type.
Stack: [..., a:I2] -> [..., |a|:I2]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Integer-typed argument.
Dim a As Integer, c As Integer
c = Abs(a)
Encoding, evidence and notes
Encoding: FB D4 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ACA9, shared by 2 dispatch slots (real opcode #184). This is a duplicate slot of (0,BB) FnAbsI2. Other slots: (0,BB) FnAbsI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BB) FnAbsI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610ACA9, dispatch slot 0x66107464, modOpcodes line 1421.
FnAbsI4
(0,0xBC)emittedprimary of 2handler #185Integerconfirmed_msdocs3 corpus hitsPops a of type 32-bit signed integer (VB6 Long), pushes |a| of the same type.
Stack: [..., a:I4] -> [..., |a|:I4]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Long-typed argument.
Public Sub Main()
Dim a As Long, c As Long
c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding: BC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BC FnAbsI4
Form2.txtJS_LineChanged(ByRef Position As Long) @ 0x452294 | 45232A BC FnAbsI4
Form2.txtJS_LineChanged(ByRef Position As Long) @ 0x452294 | 452363 BC FnAbsI4
frmBruteZLib.cmdLoadNewStream_Click @ 0x465B08 | 465DA1 BC FnAbsI4
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BC_FnAbsI4.
Handler: 0x6610ACC6, shared by 2 dispatch slots (real opcode #185). This is the primary slot. Other slots: (1,D5) FnAbsI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, c As Long
c = Abs(a)Description: draft, by claude-opus-4.7. Handler 0x6610ACC6, dispatch slot 0x66107004, modOpcodes line 1378.
FnAbsI4
(1,0xD5)not emitteddup of (0,BC)handler #185Integerconfirmed_handlerAlias dispatch slot (1, 0xD5) for the canonical FnAbsI4 at (0, 0xBC); semantics are identical.
Pops a of type 32-bit signed integer (VB6 Long), pushes |a| of the same type.
Stack: [..., a:I4] -> [..., |a|:I4]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Long-typed argument.
Dim a As Long, c As Long
c = Abs(a)
Encoding, evidence and notes
Encoding: FB D5 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ACC6, shared by 2 dispatch slots (real opcode #185). This is a duplicate slot of (0,BC) FnAbsI4. Other slots: (0,BC) FnAbsI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BC) FnAbsI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610ACC6, dispatch slot 0x66107468, modOpcodes line 1422.
FnAbsR4
(0,0xBD)emittedprimary of 3handler #186Floating pointconfirmed_msdocsPops a of type 32-bit IEEE 754 float (VB6 Single), pushes |a| of the same type.
Stack: [..., a:R4] -> [..., |a|:R4]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Single-typed argument.
Public Sub Main()
Dim a As Single, c As Single
c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding: BD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BD FnAbsR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BD_FnAbsR4.
Handler: 0x6610ACF5, shared by 3 dispatch slots (real opcode #186). This is the primary slot. Other slots: (1,D6) FnAbsR4, (1,D7) FnAbsR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, c As Single
c = Abs(a)(1,0xD6) FnAbsR4, (1,0xD7) FnAbsR4
Description: draft, by claude-opus-4.7. Handler 0x6610ACF5, dispatch slot 0x66107008, modOpcodes line 1379.
FnAbsR4
(1,0xD6)not emitteddup of (0,BD)handler #186Floating pointconfirmed_handlerAlias dispatch slot (1, 0xD6) for the canonical FnAbsR4 at (0, 0xBD); semantics are identical.
Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes |a| of the same type.
Stack: [..., a:R4] -> [..., |a|:R4]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Single-typed argument.
Dim a As Single, c As Single
c = Abs(a)
Encoding, evidence and notes
Encoding: FB D6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ACF5, shared by 3 dispatch slots (real opcode #186). This is a duplicate slot of (0,BD) FnAbsR4. Other slots: (0,BD) FnAbsR4, (1,D7) FnAbsR4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BD) FnAbsR4 (same handler, different slot)
(0,0xBD) FnAbsR4, (1,0xD7) FnAbsR4
Description: draft, by claude-opus-4.7. Handler 0x6610ACF5, dispatch slot 0x6610746C, modOpcodes line 1423.
FnAbsR4
(1,0xD7)not emitteddup of (0,BD)handler #186Floating pointconfirmed_handlerAlias dispatch slot (1, 0xD7) for the canonical FnAbsR4 at (0, 0xBD); semantics are identical.
Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes |a| of the same type.
Stack: [..., a:R4] -> [..., |a|:R4]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Emitted for Abs() applied to a Single-typed argument.
Dim a As Single, c As Single
c = Abs(a)
Encoding, evidence and notes
Encoding: FB D7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ACF5, shared by 3 dispatch slots (real opcode #186). This is a duplicate slot of (0,BD) FnAbsR4. Other slots: (0,BD) FnAbsR4, (1,D6) FnAbsR4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BD) FnAbsR4 (same handler, different slot)
(0,0xBD) FnAbsR4, (1,0xD6) FnAbsR4
Description: draft, by claude-opus-4.7. Handler 0x6610ACF5, dispatch slot 0x66107470, modOpcodes line 1424.
FnAbsVar
(1,0xD9)emittedhandler #336Variantinferred_corpusAbs(); result Variant in a temporary.Pops a Variant, applies Abs() (Null propagates) and writes the result Variant to the temporary %a.
Stack: [..., a:Var] -> [..., r:Var]
Emitted for Abs() applied to a Variant.
Public Sub Main()
Dim a As Variant, c As Variant
c = Abs(a)
End Sub
Encoding, evidence and notes
Encoding: FB D9 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBD9 4CFF FnAbsVar var_B4
FBD9 4CFF FnAbsVar var_B4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_D9_FnAbsVar.
Handler: 0x6610ADE8, unique to this slot (real opcode #336).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, c As Variant
c = Abs(a)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610ADE8, dispatch slot 0x66107478, modOpcodes line 1092.
FnFixCy
(1,0xE0)emittedhandler #338Currencyconfirmed_msdocsFix() of a Currency value: truncates toward zero.Replaces the 8-byte Currency on the evaluation stack with its integer part: Fix truncates toward zero (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.
Stack: [..., a] -> [..., Fix(a)]
Emitted for Fix(x) where x is Currency. Variant arguments use FnFixVar.
Public Sub Main()
Dim a As Currency, c As Currency
c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding: FB E0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE0 FnFixCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E0_FnFixCy.
Handler: 0x6610ADB5, unique to this slot (real opcode #338).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, c As Currency
a = -2.5
c = Fix(a)Description: draft, by claude-opus-5-5. Handler 0x6610ADB5, dispatch slot 0x66107494, modOpcodes line 1572.
FnFixR8
(1,0xDE)emittedprimary of 2handler #337Floating pointconfirmed_msdocsFix() of a Single value: truncates toward zero.Replaces the floating-point value in ST0 with its integer part: Fix truncates toward zero (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.
Stack: [..., a] -> [..., Fix(a)]
Emitted for Fix(x) where x is Single. (1,DF) is the Double/Date/String form; same handler. Variant arguments use FnFixVar.
Public Sub Main()
Dim a As Single, c As Single
c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding: FB DE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBDE FnFixR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_DE_FnFixR8.
Handler: 0x66105EC9, shared by 2 dispatch slots (real opcode #337). This is the primary slot. Other slots: (1,DF) FnFixR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,DE):
Dim a As Single, c As Single : c = Fix(a) - (1,DF):
Dim a As Double, c As Double : c = Fix(a)
Finding: Compiler selects this slot for Fix(<Single>). (1,DF) is used for Double/Date/String. Effective meaning: FnFixR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, c As Single
a = -2.5
c = Fix(a)Description: draft, by claude-opus-5-5. Handler 0x66105EC9, dispatch slot 0x6610748C, modOpcodes line 1570.
FnFixR8
(1,0xDF)emitteddup of (1,DE)handler #337Floating pointconfirmed_handlerFix() of a Double, Date or String value: truncates toward zero.Replaces the floating-point value in ST0 with its integer part: Fix truncates toward zero (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.
Stack: [..., a] -> [..., Fix(a)]
Emitted for Fix(x) where x is Double, Date or String. (1,DE) is the Single form; same handler. Variant arguments use FnFixVar.
Public Sub Main()
Dim a As Double, c As Double
c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding: FB DF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBDF FnFixR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_DF_FnFixR8.
Handler: 0x66105EC9, shared by 2 dispatch slots (real opcode #337). This is a duplicate slot of (1,DE) FnFixR8. Other slots: (1,DE) FnFixR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,DE):
Dim a As Single, c As Single : c = Fix(a) - (1,DF):
Dim a As Double, c As Double : c = Fix(a)
Finding: Compiler selects this slot for Fix(<Double|Date|String>).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, c As Double
a = -2.5
c = Fix(a)Description: draft, by claude-opus-5-5. Handler 0x66105EC9, dispatch slot 0x66107490, modOpcodes line 1571.
FnFixVar
(1,0xE1)emittedhandler #339Variantinferred_corpusFix(); result Variant in a temporary.Pops a Variant, applies Fix() (Null propagates) and writes the result Variant to the temporary %a.
Stack: [..., a:Var] -> [..., r:Var]
Emitted for Fix() applied to a Variant.
Public Sub Main()
Dim a As Variant, c As Variant
c = Fix(a)
End Sub
Encoding, evidence and notes
Encoding: FB E1 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBE1 4CFF FnFixVar var_B4
FBE1 4CFF FnFixVar var_B4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E1_FnFixVar.
Handler: 0x6610ADF3, unique to this slot (real opcode #339).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, c As Variant
c = Fix(a)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610ADF3, dispatch slot 0x66107498, modOpcodes line 1093.
FnIntCy
(1,0xE8)emittedhandler #341Currencyconfirmed_msdocsInt() of a Currency value: rounds down toward negative infinity.Replaces the 8-byte Currency on the evaluation stack with its integer part: Int rounds down toward negative infinity (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.
Stack: [..., a] -> [..., Int(a)]
Emitted for Int(x) where x is Currency. Variant arguments use FnIntVar.
Public Sub Main()
Dim a As Currency, c As Currency
c = Int(a)
End Sub
Encoding, evidence and notes
Encoding: FB E8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE8 FnIntCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E8_FnIntCy.
Handler: 0x6610ADC8, unique to this slot (real opcode #341).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, c As Currency
a = -2.5
c = Int(a)Description: draft, by claude-opus-5-5. Handler 0x6610ADC8, dispatch slot 0x661074B4, modOpcodes line 928.
FnIntR8
(1,0xE6)emitteddup of (1,E7)handler #340Floating pointconfirmed_msdocsInt() of a Single value: rounds down toward negative infinity.Replaces the floating-point value in ST0 with its integer part: Int rounds down toward negative infinity (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.
Stack: [..., a] -> [..., Int(a)]
Emitted for Int(x) where x is Single. (1,E7) is the Double/Date/String form; same handler. Variant arguments use FnIntVar.
Public Sub Main()
Dim a As Single, c As Single
c = Int(a)
End Sub
Encoding, evidence and notes
Encoding: FB E6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE6 FnIntR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E6_FnIntR8.
Handler: 0x66105EE5, shared by 2 dispatch slots (real opcode #340). This is a duplicate slot of (1,E7) FnIntR8. Other slots: (1,E7) FnIntR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,E6):
Dim a As Single, c As Single : c = Int(a) - (1,E7):
Dim a As Double, c As Double : c = Int(a)
Finding: Compiler selects this slot for Int(<Single>). (1,E7) is used for Double/Date/String. Effective meaning: FnIntR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, c As Single
a = -2.5
c = Int(a)Description: draft, by claude-opus-5-5. Handler 0x66105EE5, dispatch slot 0x661074AC, modOpcodes line 926.
FnIntR8
(1,0xE7)emittedprimary of 2handler #340Floating pointconfirmed_handler1 corpus hitsInt() of a Double, Date or String value: rounds down toward negative infinity.Replaces the floating-point value in ST0 with its integer part: Int rounds down toward negative infinity (Fix(-2.5) = -2, Int(-2.5) = -3). The type is unchanged.
Stack: [..., a] -> [..., Int(a)]
Emitted for Int(x) where x is Double, Date or String. (1,E6) is the Single form; same handler. Variant arguments use FnIntVar.
Public Sub Main()
Dim a As Double, c As Double
c = Int(a)
End Sub
Encoding, evidence and notes
Encoding: FB E7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBE7 FnIntR8
Form2.LongHex @ 0x441B00 | 441B09 FBE7 FnIntR8
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E7_FnIntR8.
Handler: 0x66105EE5, shared by 2 dispatch slots (real opcode #340). This is the primary slot. Other slots: (1,E6) FnIntR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,E6):
Dim a As Single, c As Single : c = Int(a) - (1,E7):
Dim a As Double, c As Double : c = Int(a)
Finding: Compiler selects this slot for Int(<Double|Date|String>).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, c As Double
a = -2.5
c = Int(a)Description: draft, by claude-opus-5-5. Handler 0x66105EE5, dispatch slot 0x661074B0, modOpcodes line 927.
FnIntVar
(1,0xE9)emittedhandler #342Variantinferred_corpusInt(); result Variant in a temporary.Pops a Variant, applies Int() (Null propagates) and writes the result Variant to the temporary %a.
Stack: [..., a:Var] -> [..., r:Var]
Emitted for Int() applied to a Variant.
Public Sub Main()
Dim a As Variant, c As Variant
c = Int(a)
End Sub
Encoding, evidence and notes
Encoding: FB E9 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBE9 4CFF FnIntVar var_B4
FBE9 4CFF FnIntVar var_B4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_E9_FnIntVar.
Handler: 0x6610ADFE, unique to this slot (real opcode #342).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, c As Variant
c = Int(a)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610ADFE, dispatch slot 0x661074B8, modOpcodes line 1094.
FnSgnCy
(1,0xF7)emittedhandler #350Currencyconfirmed_msdocsSgn() of a Currency value; push an Integer (-1, 0 or 1).Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.
Stack: [..., a] -> [..., s:I2]
Emitted for Sgn(x) where x is Currency.
Public Sub Main()
Dim a As Currency, c As Variant
c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding: FB F7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF7 FnSgnCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F7_FnSgnCy.
Handler: 0x6610AD85, unique to this slot (real opcode #350).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, r As Integer
a = -5
r = Sgn(a)Description: draft, by claude-opus-5-5. Handler 0x6610AD85, dispatch slot 0x661074F0, modOpcodes line 934.
FnSgnI4
(1,0xF4)emittedhandler #348Integerconfirmed_msdocsSgn() of a Long value; push an Integer (-1, 0 or 1).Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.
Stack: [..., a] -> [..., s:I2]
Emitted for Sgn(x) where x is Long.
Public Sub Main()
Dim a As Long, c As Variant
c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding: FB F4 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF4 FnSgnI4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F4_FnSgnI4.
Handler: 0x6610AD82, unique to this slot (real opcode #348).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Long, r As Integer
a = -5
r = Sgn(a)Description: draft, by claude-opus-5-5. Handler 0x6610AD82, dispatch slot 0x661074E4, modOpcodes line 931.
FnSgnR4
(1,0xF6)emitteddup of (1,F5)handler #349Floating pointconfirmed_msdocsSgn() of a Double, Date, String or Variant (after coercion) value; push an Integer (-1, 0 or 1).Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.
Stack: [..., a] -> [..., s:I2]
Emitted for Sgn(x) where x is Double, Date, String or Variant (after coercion). The slot is named FnSgnR4, but probes show it is selected for Double/Date/String (and coerced Variant) arguments; (1,F5) is used for Single. Same handler.
Public Sub Main()
Dim a As Date, c As Variant
c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding: FB F6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF6 FnSgnR4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F6_FnSgnR4.
Handler: 0x6610AD8E, shared by 2 dispatch slots (real opcode #349). This is a duplicate slot of (1,F5) FnSgnR8. Other slots: (1,F5) FnSgnR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,F5):
Dim a As Single, c As Variant : c = Sgn(a) - (1,F6):
Dim a As Date, c As Variant : c = Sgn(a)
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, r As Integer
a = -5
r = Sgn(a)Description: draft, by claude-opus-5-5. Handler 0x6610AD8E, dispatch slot 0x661074EC, modOpcodes line 933.
FnSgnR8
(1,0xF5)emittedprimary of 2handler #349Floating pointconfirmed_msdocsSgn() of a Single value; push an Integer (-1, 0 or 1).Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.
Stack: [..., a] -> [..., s:I2]
Emitted for Sgn(x) where x is Single. The slot is named FnSgnR8, but probes show it is selected for Single arguments; (1,F6) is used for Double. Same handler.
Public Sub Main()
Dim a As Single, c As Variant
c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding: FB F5 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF5 FnSgnR8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F5_FnSgnR8.
Handler: 0x6610AD8E, shared by 2 dispatch slots (real opcode #349). This is the primary slot. Other slots: (1,F6) FnSgnR4.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (1,F5):
Dim a As Single, c As Variant : c = Sgn(a) - (1,F6):
Dim a As Date, c As Variant : c = Sgn(a)
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Single, r As Integer
a = -5
r = Sgn(a)Description: draft, by claude-opus-5-5. Handler 0x6610AD8E, dispatch slot 0x661074E8, modOpcodes line 932.
FnSgnUI1
(1,0xF2)not emitteddup of (1,F3)handler #347Integerconfirmed_msdocsDispatch slot (1, 0xF2) runs the same MSVBVM60 handler as (1,F3) FnSgnUI1; runtime behaviour is identical.
Alias dispatch slot (1, 0xF3) for the canonical FnSgnUI1 at (1, 0xF2); semantics are identical.
Pops a of type 8-bit unsigned integer (VB6 Byte), pushes |a| of the same type.
Stack: [..., a:UI1] -> [..., |a|:UI1]
Implements VB6 Abs(). For signed integers, Abs(MinValue) raises overflow (error 6). For floating values, the sign bit is cleared; NaN is preserved.
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Sgn() of Byte/Integer/Boolean) compiles to (1,F3) FnSgnUI1 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB F2 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AD6E, shared by 2 dispatch slots (real opcode #347). This is a duplicate slot of (1,F3) FnSgnUI1. Other slots: (1,F3) FnSgnUI1.
Description: draft, by claude-opus-5-5. Handler 0x6610AD6E, dispatch slot 0x661074DC, modOpcodes line 929.
FnSgnUI1
(1,0xF3)emittedprimary of 2handler #347Integerconfirmed_handlerSgn() of a Integer, Boolean or Byte value; push an Integer (-1, 0 or 1).Pops the operand and pushes its sign as a 16-bit Integer: -1 if negative, 0 if zero, 1 if positive.
Stack: [..., a] -> [..., s:I2]
Emitted for Sgn(x) where x is Integer, Boolean or Byte. The name suggests Byte, but the compiler also uses this slot for Integer and Boolean arguments.
Public Sub Main()
Dim a As Integer, c As Integer
c = Sgn(a)
End Sub
Encoding, evidence and notes
Encoding: FB F3 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBF3 FnSgnUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_F3_FnSgnUI1.
Handler: 0x6610AD6E, shared by 2 dispatch slots (real opcode #347). This is the primary slot. Other slots: (1,F2) FnSgnUI1.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, r As Integer
a = -5
r = Sgn(a)Description: draft, by claude-opus-5-5. Handler 0x6610AD6E, dispatch slot 0x661074E0, modOpcodes line 930.
Math_Add
Addition
AddCy
(0,0xAC)emittedprimary of 2handler #169Currencyconfirmed_msdocsPops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a + b, pushes the 64-bit scaled-integer Currency (×10^4) result.
Stack: [..., a:Cy, b:Cy] -> [..., (a + b):Cy]
Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.
Emitted when both operands of + are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Public Sub Main()
Dim a As Currency, b As Currency, c As Currency
c = a + b
End Sub
Encoding, evidence and notes
Encoding: AC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AC AddCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AC_AddCy.
Handler: 0x6610AADD, shared by 2 dispatch slots (real opcode #169). This is the primary slot. Other slots: (1,93) AddCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Currency
c = a + bDescription: draft, by claude-opus-4.7. Handler 0x6610AADD, dispatch slot 0x66106FC4, modOpcodes line 1321.
AddCy
(1,0x93)not emitteddup of (0,AC)handler #169Currencyconfirmed_handlerAlias dispatch slot (1, 0x93) for the canonical AddCy at (0, 0xAC); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a + b, pushes the 64-bit scaled-integer Currency (×10^4) result.
Stack: [..., a:Cy, b:Cy] -> [..., (a + b):Cy]
Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.
Emitted when both operands of + are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Dim a As Currency, b As Currency, c As Currency
c = a + b
Encoding, evidence and notes
Encoding: FB 93 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AADD, shared by 2 dispatch slots (real opcode #169). This is a duplicate slot of (0,AC) AddCy. Other slots: (0,AC) AddCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AC) AddCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610AADD, dispatch slot 0x66107360, modOpcodes line 1322.
AddI2
(0,0xA9)emittedprimary of 2handler #166Integerconfirmed_msdocs2 corpus hitsPops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a + b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a + b):I2]
Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of + are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Public Sub Main()
Dim a As Integer, b As Integer, c As Integer
c = a + b
End Sub
Encoding, evidence and notes
Encoding: A9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: A9 AddI2
modEscapes.Proc_472E38 @ 0x472E38 | 4732EF A9 AddI2
modEscapes.Proc_4501DC @ 0x4501DC | 450299 A9 AddI2
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_A9_AddI2.
Handler: 0x66105DC2, shared by 2 dispatch slots (real opcode #166). This is the primary slot. Other slots: (1,8F) AddI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Integer
c = a + bDescription: draft, by claude-opus-4.7. Handler 0x66105DC2, dispatch slot 0x66106FB8, modOpcodes line 1317.
AddI2
(1,0x8F)not emitteddup of (0,A9)handler #166Integerconfirmed_handlerAlias dispatch slot (1, 0x8F) for the canonical AddI2 at (0, 0xA9); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a + b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a + b):I2]
Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of + are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Dim a As Integer, b As Integer, c As Integer
c = a + b
Encoding, evidence and notes
Encoding: FB 8F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105DC2, shared by 2 dispatch slots (real opcode #166). This is a duplicate slot of (0,A9) AddI2. Other slots: (0,A9) AddI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,A9) AddI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105DC2, dispatch slot 0x66107350, modOpcodes line 1318.
AddI4
(0,0xAA)emittedprimary of 2handler #167Integerconfirmed_msdocs137 corpus hitsPops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a + b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a + b):I4]
Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of + are statically typed as Long. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a + b
End Sub
Encoding, evidence and notes
Encoding: AA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AA AddI4
Form1.mnuExtractURI_Click @ 0x45774C | 457810 AA AddI4
Form1.mnuHideDups_Click @ 0x4629E4 | 462B42 AA AddI4
Form1.mnuHideDups_Click @ 0x4629E4 | 462BCB AA AddI4
137 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AA_AddI4.
Handler: 0x66105DD9, shared by 2 dispatch slots (real opcode #167). This is the primary slot. Other slots: (1,90) AddI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 137 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a + bDescription: draft, by claude-opus-4.7. Handler 0x66105DD9, dispatch slot 0x66106FBC, modOpcodes line 1319.
AddI4
(1,0x90)not emitteddup of (0,AA)handler #167Integerconfirmed_handlerAlias dispatch slot (1, 0x90) for the canonical AddI4 at (0, 0xAA); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a + b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a + b):I4]
Arithmetic is two's-complement on the native width. On addition overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of + are statically typed as Long. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Dim a As Long, b As Long, c As Long
c = a + b
Encoding, evidence and notes
Encoding: FB 90 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105DD9, shared by 2 dispatch slots (real opcode #167). This is a duplicate slot of (0,AA) AddI4. Other slots: (0,AA) AddI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AA) AddI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105DD9, dispatch slot 0x66107354, modOpcodes line 1320.
AddR4
(1,0x91)not emitteddup of (0,AB)handler #168Floating pointconfirmed_msdocsPops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a + b, pushes the 32-bit IEEE 754 float (VB6 Single) result.
Stack: [..., a:R4, b:R4] -> [..., (a + b):R4]
IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of + are statically typed as Single. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Dim a As Single, b As Single, c As Single
c = a + b
Encoding, evidence and notes
Encoding: FB 91 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105DEF, shared by 3 dispatch slots (real opcode #168). This is a duplicate slot of (0,AB) AddR8. Other slots: (0,AB) AddR8, (1,92) AddR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AB) AddR8 (same handler, different slot)
(0,0xAB) AddR8, (1,0x92) AddR4
Description: draft, by claude-opus-4.7. Handler 0x66105DEF, dispatch slot 0x66107358, modOpcodes line 1324.
AddR4
(1,0x92)not emitteddup of (0,AB)handler #168Floating pointconfirmed_handlerAlias dispatch slot (1, 0x92) for the canonical AddR4 at (1, 0x91); semantics are identical.
Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a + b, pushes the 32-bit IEEE 754 float (VB6 Single) result.
Stack: [..., a:R4, b:R4] -> [..., (a + b):R4]
IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of + are statically typed as Single. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Dim a As Single, b As Single, c As Single
c = a + b
Encoding, evidence and notes
Encoding: FB 92 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105DEF, shared by 3 dispatch slots (real opcode #168). This is a duplicate slot of (0,AB) AddR8. Other slots: (0,AB) AddR8, (1,91) AddR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AB) AddR8 (same handler, different slot)
(0,0xAB) AddR8, (1,0x91) AddR4
Description: draft, by claude-opus-4.7. Handler 0x66105DEF, dispatch slot 0x6610735C, modOpcodes line 1325.
AddR8
(0,0xAB)emittedprimary of 3handler #168Floating pointconfirmed_msdocs8 corpus hitsPops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a + b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a + b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of + are statically typed as Double. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Public Sub Main()
Dim a As Single, b As Single, c As Single
c = a + b
End Sub
Encoding, evidence and notes
Encoding: AB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AB AddR8
Form1.Form_Resize @ 0x474F3C | 4751F7 AB AddR8
Form1.Proc_440DC4 @ 0x440DC4 | 440DE3 AB AddR8
Form2.splitter_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) @ 0x4458E0 | 445949 AB AddR8
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AB_AddR8.
Handler: 0x66105DEF, shared by 3 dispatch slots (real opcode #168). This is the primary slot. Other slots: (1,91) AddR4, (1,92) AddR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Double, c As Double
c = a + b(1,0x91) AddR4, (1,0x92) AddR4
Description: draft, by claude-opus-4.7. Handler 0x66105DEF, dispatch slot 0x66106FC0, modOpcodes line 1326.
AddUI1
(1,0x8E)emittedhandler #318Integerconfirmed_msdocsPops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a + b, pushes the 8-bit unsigned integer (VB6 Byte) result.
Stack: [..., a:UI1, b:UI1] -> [..., (a + b):UI1]
Emitted when both operands of + are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (AddR8 if Double appears; AddVar if Variant is involved).
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a + b
End Sub
Encoding, evidence and notes
Encoding: FB 8E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB8E AddUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_8E_AddUI1.
Handler: 0x6610AAC7, unique to this slot (real opcode #318).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a + bDescription: draft, by claude-opus-4.7. Handler 0x6610AAC7, dispatch slot 0x6610734C, modOpcodes line 1323.
AddVar
(1,0x94)emittedhandler #319Variantinferred_corpus94 corpus hitsPops two VBA Variant operands b and a (top is b), computes a + b, pushes the VBA Variant result.
Stack: [..., a:Var, b:Var] -> [..., (a + b):Var]
Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.
Emitted when at least one operand of + is a Variant. Same-typed primitive operands instead emit AddI2/AddI4/AddR4/AddR8/AddCy.
Public Sub Main()
Dim v As Variant, w As Variant, x As Variant
x = v + w
End Sub
Encoding, evidence and notes
Encoding: FB 94 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB94 3CFF AddVar var_C4
CPDFStream.Proc_45998C @ 0x45998C | 4599A3 FB94 34FF AddVar var_CC
Form2.ExtractFunction @ 0x45FB40 | 45FD39 FB94 0CFF AddVar var_F4
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D2BF FB94 68FF AddVar var_98
94 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_94_AddVar.
Handler: 0x66105F6C, unique to this slot (real opcode #319).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 94 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a + bDescription: draft, by claude-opus-4.7. Handler 0x66105F6C, dispatch slot 0x66107364, modOpcodes line 1327.
Math_Div
FP division
DivR8
(0,0xB6)emittedprimary of 3handler #179Floating pointconfirmed_msdocs30 corpus hitsPops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a / b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a / b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of / are statically typed as Double. Mixed-type expressions go through narrower or wider variants (DivR8 if Double appears; DivVar if Variant is involved).
Public Sub Main()
Dim a As Single, b As Single, c As Single
c = a / b
End Sub
Encoding, evidence and notes
Encoding: B6, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B6 DivR8
Form1.cmdDecode_Click @ 0x4775C0 | 477E88 B6 DivR8
Form1.cmdDecode_Click @ 0x4775C0 | 477EAF B6 DivR8
Form1.cmdDecode_Click @ 0x4775C0 | 477EE8 B6 DivR8
30 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B6_DivR8.
Handler: 0x66105E86, shared by 3 dispatch slots (real opcode #179). This is the primary slot. Other slots: (1,B9) DivR8, (1,BA) DivR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 30 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Double, c As Double
c = a / b(1,0xB9) DivR8, (1,0xBA) DivR8
Description: draft, by claude-opus-4.7. Handler 0x66105E86, dispatch slot 0x66106FEC, modOpcodes line 1355.
DivR8
(1,0xB9)not emitteddup of (0,B6)handler #179Floating pointconfirmed_handlerAlias dispatch slot (1, 0xB9) for the canonical DivR8 at (0, 0xB6); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a / b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a / b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of / are statically typed as Double. Mixed-type expressions go through narrower or wider variants (DivR8 if Double appears; DivVar if Variant is involved).
Dim a As Double, b As Double, c As Double
c = a / b
Encoding, evidence and notes
Encoding: FB B9 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E86, shared by 3 dispatch slots (real opcode #179). This is a duplicate slot of (0,B6) DivR8. Other slots: (0,B6) DivR8, (1,BA) DivR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B6) DivR8 (same handler, different slot)
(0,0xB6) DivR8, (1,0xBA) DivR8
Description: draft, by claude-opus-4.7. Handler 0x66105E86, dispatch slot 0x661073F8, modOpcodes line 1356.
DivR8
(1,0xBA)not emitteddup of (0,B6)handler #179Floating pointconfirmed_handlerAlias dispatch slot (1, 0xBA) for the canonical DivR8 at (0, 0xB6); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a / b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a / b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of / are statically typed as Double. Mixed-type expressions go through narrower or wider variants (DivR8 if Double appears; DivVar if Variant is involved).
Dim a As Double, b As Double, c As Double
c = a / b
Encoding, evidence and notes
Encoding: FB BA (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E86, shared by 3 dispatch slots (real opcode #179). This is a duplicate slot of (0,B6) DivR8. Other slots: (0,B6) DivR8, (1,B9) DivR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B6) DivR8 (same handler, different slot)
(0,0xB6) DivR8, (1,0xB9) DivR8
Description: draft, by claude-opus-4.7. Handler 0x66105E86, dispatch slot 0x661073FC, modOpcodes line 1357.
DivVar
(1,0xBC)emittedhandler #328Variantinferred_corpus2 corpus hitsPops two VBA Variant operands b and a (top is b), computes a / b, pushes the VBA Variant result.
Stack: [..., a:Var, b:Var] -> [..., (a / b):Var]
Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.
Emitted when at least one operand of / is a Variant. Same-typed primitive operands instead emit DivI2/DivI4/DivR4/DivR8/DivCy.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a / b
End Sub
Encoding, evidence and notes
Encoding: FB BC (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBBC 3CFF DivVar var_C4
b64.Proc_469B0C @ 0x469B0C | 469C09 FBBC 40FF DivVar var_C0
frmBruteZLib.setPB @ 0x4444FC | 444511 FBBC 4CFF DivVar var_B4
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_BC_DivVar.
Handler: 0x66105F5C, unique to this slot (real opcode #328).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a / bDescription: draft, by claude-opus-4.7. Handler 0x66105F5C, dispatch slot 0x66107404, modOpcodes line 1363.
Math_IDiv
Integer division
IDvI2
(0,0xBF)emittedprimary of 2handler #188Integerconfirmed_msdocs13 corpus hitsPops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a \ b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a \ b):I2]
Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of \ are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).
Public Sub Main()
Dim a As Integer, b As Integer, c As Integer
c = a \ b
End Sub
Encoding, evidence and notes
Encoding: BF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BF IDvI2
b64.Proc_464C2C @ 0x464C2C | 464CD3 BF IDvI2
b64.Proc_464C2C @ 0x464C2C | 464D09 BF IDvI2
b64.Proc_464C2C @ 0x464C2C | 464D4C BF IDvI2
13 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BF_IDvI2.
Handler: 0x66105E5E, shared by 2 dispatch slots (real opcode #188). This is the primary slot. Other slots: (1,A7) IDvI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 13 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Integer
c = a \ bDescription: draft, by claude-opus-4.7. Handler 0x66105E5E, dispatch slot 0x66107010, modOpcodes line 1358.
IDvI2
(1,0xA7)not emitteddup of (0,BF)handler #188Integerconfirmed_handlerAlias dispatch slot (1, 0xA7) for the canonical IDvI2 at (0, 0xBF); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a \ b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a \ b):I2]
Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of \ are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).
Dim a As Integer, b As Integer, c As Integer
c = a \ b
Encoding, evidence and notes
Encoding: FB A7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E5E, shared by 2 dispatch slots (real opcode #188). This is a duplicate slot of (0,BF) IDvI2. Other slots: (0,BF) IDvI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BF) IDvI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105E5E, dispatch slot 0x661073B0, modOpcodes line 1361.
IDvI4
(0,0xC0)emittedprimary of 2handler #189Integerconfirmed_msdocs6 corpus hitsPops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a \ b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a \ b):I4]
Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of \ are statically typed as Long. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a \ b
End Sub
Encoding, evidence and notes
Encoding: C0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C0 IDvI4
CPdfParser.Proc_457140 @ 0x457140 | 4571FF C0 IDvI4
modCrc.Proc_446CFC @ 0x446CFC | 446D5D C0 IDvI4
modCrc.Proc_446CFC @ 0x446CFC | 446D83 C0 IDvI4
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C0_IDvI4.
Handler: 0x6610ABC3, shared by 2 dispatch slots (real opcode #189). This is the primary slot. Other slots: (1,A8) IDvI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a \ bDescription: draft, by claude-opus-4.7. Handler 0x6610ABC3, dispatch slot 0x66107014, modOpcodes line 1359.
IDvI4
(1,0xA8)not emitteddup of (0,C0)handler #189Integerconfirmed_handlerAlias dispatch slot (1, 0xA8) for the canonical IDvI4 at (0, 0xC0); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a \ b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a \ b):I4]
Arithmetic is two's-complement on the native width. On integer division (truncated) overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of \ are statically typed as Long. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).
Dim a As Long, b As Long, c As Long
c = a \ b
Encoding, evidence and notes
Encoding: FB A8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ABC3, shared by 2 dispatch slots (real opcode #189). This is a duplicate slot of (0,C0) IDvI4. Other slots: (0,C0) IDvI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C0) IDvI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610ABC3, dispatch slot 0x661073B4, modOpcodes line 1362.
IDvUI1
(1,0xA6)emittedhandler #324Integerconfirmed_msdocsPops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a \ b, pushes the 8-bit unsigned integer (VB6 Byte) result.
Stack: [..., a:UI1, b:UI1] -> [..., (a \ b):UI1]
Emitted when both operands of \ are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (IDvR8 if Double appears; IDvVar if Variant is involved).
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a \ b
End Sub
Encoding, evidence and notes
Encoding: FB A6 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBA6 IDvUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_A6_IDvUI1.
Handler: 0x6610AB9B, unique to this slot (real opcode #324).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a \ bDescription: draft, by claude-opus-4.7. Handler 0x6610AB9B, dispatch slot 0x661073AC, modOpcodes line 1360.
IDvVar
(1,0xAC)emittedhandler #325Variantinferred_corpus\); result Variant in a temporary.Pops two Variants, applies integer division (\) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when either operand of integer division (\) is a Variant.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a \ b
End Sub
Encoding, evidence and notes
Encoding: FB AC (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBAC 3CFF IDvVar var_C4
FBAC 3CFF IDvVar var_C4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_AC_IDvVar.
Handler: 0x66105F64, unique to this slot (real opcode #325).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a \ b
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105F64, dispatch slot 0x661073C4, modOpcodes line 1364.
Math_Mod
Modulo
ModI2
(0,0xC1)emittedprimary of 2handler #190Integerconfirmed_msdocsPops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a Mod b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a Mod b):I2]
Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of Mod are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).
Public Sub Main()
Dim a As Integer, b As Integer, c As Integer
c = a Mod b
End Sub
Encoding, evidence and notes
Encoding: C1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C1 ModI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C1_ModI2.
Handler: 0x66105E72, shared by 2 dispatch slots (real opcode #190). This is the primary slot. Other slots: (1,9F) ModI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, b As Integer, c As Integer
c = a Mod bDescription: draft, by claude-opus-4.7. Handler 0x66105E72, dispatch slot 0x66107018, modOpcodes line 1382.
ModI2
(1,0x9F)not emitteddup of (0,C1)handler #190Integerconfirmed_handlerAlias dispatch slot (1, 0x9F) for the canonical ModI2 at (0, 0xC1); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a Mod b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a Mod b):I2]
Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of Mod are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).
Dim a As Integer, b As Integer, c As Integer
c = a Mod b
Encoding, evidence and notes
Encoding: FB 9F (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E72, shared by 2 dispatch slots (real opcode #190). This is a duplicate slot of (0,C1) ModI2. Other slots: (0,C1) ModI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C1) ModI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105E72, dispatch slot 0x66107390, modOpcodes line 1383.
ModI4
(0,0xC2)emittedprimary of 2handler #191Integerconfirmed_msdocs4 corpus hitsPops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a Mod b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a Mod b):I4]
Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of Mod are statically typed as Long. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a Mod b
End Sub
Encoding, evidence and notes
Encoding: C2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: C2 ModI4
modZLIB.Proc_4666C0 @ 0x4666C0 | 46696F C2 ModI4
modZLIB.Proc_4666C0 @ 0x4666C0 | 466985 C2 ModI4
b64.Proc_464C2C @ 0x464C2C | 464C52 C2 ModI4
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_C2_ModI4.
Handler: 0x6610ABD5, shared by 2 dispatch slots (real opcode #191). This is the primary slot. Other slots: (1,A0) ModI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a Mod bDescription: draft, by claude-opus-4.7. Handler 0x6610ABD5, dispatch slot 0x6610701C, modOpcodes line 1384.
ModI4
(1,0xA0)not emitteddup of (0,C2)handler #191Integerconfirmed_handlerAlias dispatch slot (1, 0xA0) for the canonical ModI4 at (0, 0xC2); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a Mod b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a Mod b):I4]
Arithmetic is two's-complement on the native width. On modulo overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of Mod are statically typed as Long. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).
Dim a As Long, b As Long, c As Long
c = a Mod b
Encoding, evidence and notes
Encoding: FB A0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ABD5, shared by 2 dispatch slots (real opcode #191). This is a duplicate slot of (0,C2) ModI4. Other slots: (0,C2) ModI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,C2) ModI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610ABD5, dispatch slot 0x66107394, modOpcodes line 1385.
ModUI1
(1,0x9E)emittedhandler #322Integerconfirmed_msdocsPops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a Mod b, pushes the 8-bit unsigned integer (VB6 Byte) result.
Stack: [..., a:UI1, b:UI1] -> [..., (a Mod b):UI1]
Emitted when both operands of Mod are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (ModR8 if Double appears; ModVar if Variant is involved).
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a Mod b
End Sub
Encoding, evidence and notes
Encoding: FB 9E (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB9E ModUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_9E_ModUI1.
Handler: 0x6610ABAE, unique to this slot (real opcode #322).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a Mod bDescription: draft, by claude-opus-4.7. Handler 0x6610ABAE, dispatch slot 0x6610738C, modOpcodes line 1386.
ModVar
(1,0xA4)emittedhandler #323Variantinferred_corpus2 corpus hitsPops two VBA Variant operands b and a (top is b), computes a Mod b, pushes the VBA Variant result.
Stack: [..., a:Var, b:Var] -> [..., (a Mod b):Var]
Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.
Emitted when at least one operand of Mod is a Variant. Same-typed primitive operands instead emit ModI2/ModI4/ModR4/ModR8/ModCy.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a Mod b
End Sub
Encoding, evidence and notes
Encoding: FB A4 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBA4 3CFF ModVar var_C4
fso.Proc_467FC4 @ 0x467FC4 | 46813A FBA4 BCFE ModVar var_144
Form2.mnuHex2Unicode_Click @ 0x45D160 | 45D24D FBA4 30FF ModVar var_D0
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_A4_ModVar.
Handler: 0x6610AE14, unique to this slot (real opcode #323).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a Mod bDescription: draft, by claude-opus-4.7. Handler 0x6610AE14, dispatch slot 0x661073A4, modOpcodes line 1387.
Math_Mul
Multiplication
MulCy
(0,0xB4)emittedprimary of 2handler #177Currencyconfirmed_msdocsPops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a * b, pushes the 64-bit scaled-integer Currency (×10^4) result.
Stack: [..., a:Cy, b:Cy] -> [..., (a * b):Cy]
Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.
Emitted when both operands of * are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Public Sub Main()
Dim a As Currency, c As Currency
c = a * 70000
End Sub
Encoding, evidence and notes
Encoding: B4, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B4 MulCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B4_MulCy.
Handler: 0x6610AB57, shared by 2 dispatch slots (real opcode #177). This is the primary slot. Other slots: (1,B3) MulCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Currency
c = a * bDescription: draft, by claude-opus-4.7. Handler 0x6610AB57, dispatch slot 0x66106FE4, modOpcodes line 1346.
MulCy
(1,0xB3)not emitteddup of (0,B4)handler #177Currencyconfirmed_handlerAlias dispatch slot (1, 0xB3) for the canonical MulCy at (0, 0xB4); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a * b, pushes the 64-bit scaled-integer Currency (×10^4) result.
Stack: [..., a:Cy, b:Cy] -> [..., (a * b):Cy]
Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.
Emitted when both operands of * are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Dim a As Currency, b As Currency, c As Currency
c = a * b
Encoding, evidence and notes
Encoding: FB B3 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AB57, shared by 2 dispatch slots (real opcode #177). This is a duplicate slot of (0,B4) MulCy. Other slots: (0,B4) MulCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B4) MulCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610AB57, dispatch slot 0x661073E0, modOpcodes line 1349.
MulCyI2
(0,0xB5)emittedprimary of 2handler #178Currencyconfirmed_msdocsPops a 16-bit Integer and a Currency and pushes their product as Currency (64-bit scaled integer). Overflow raises error 6.
Stack: [..., c:Cy, n:I2] -> [..., (c*n):Cy]
Emitted for between Currency and an Integer or a small integer literal, in either order. Currency Currency uses MulCy (0,B4); Currency * Single/Double goes through the FPU (CR8Cy + MulR8).
Public Sub Main()
Dim a As Currency, c As Currency
c = a * 2
End Sub
Encoding, evidence and notes
Encoding: B5, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B5 MulCyI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B5_MulCyI2.
Handler: 0x6610AB88, shared by 2 dispatch slots (real opcode #178). This is the primary slot. Other slots: (1,D1) MulCyI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim c As Currency, n As Integer, r As Currency
c = 1.5@: n = 3
r = c * nDescription: draft, by claude-opus-5-5. Handler 0x6610AB88, dispatch slot 0x66106FE8, modOpcodes line 1347.
MulCyI2
(1,0xD1)not emitteddup of (0,B5)handler #178Currencyconfirmed_handlerDispatch slot (1, 0xD1) runs the same MSVBVM60 handler as (0,B5) MulCyI2; runtime behaviour is identical.
Pops a 16-bit Integer and a Currency and pushes their product as Currency (64-bit scaled integer). Overflow raises error 6.
Stack: [..., c:Cy, n:I2] -> [..., (c*n):Cy]
Not emitted by VB6 SP6 in Phase 4 probes. Source that performs this operation (Currency * Integer) compiles to (0,B5) MulCyI2 instead. The slot is reachable only by hand-crafted or non-VB6-compiled p-code.
Encoding, evidence and notes
Encoding: FB D1 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AB88, shared by 2 dispatch slots (real opcode #178). This is a duplicate slot of (0,B5) MulCyI2. Other slots: (0,B5) MulCyI2.
Description: draft, by claude-opus-5-5. Handler 0x6610AB88, dispatch slot 0x66107458, modOpcodes line 1348.
MulI2
(0,0xB1)emittedprimary of 2handler #174Integerconfirmed_msdocs27 corpus hitsPops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a * b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a * b):I2]
Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of * are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Public Sub Main()
Dim a As Integer, c As Integer
c = a * 2
End Sub
Encoding, evidence and notes
Encoding: B1, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B1 MulI2
Form1.Form_Resize @ 0x474F3C | 47501F B1 MulI2
Form1.Form_Resize @ 0x474F3C | 475109 B1 MulI2
Form1.Form_Resize @ 0x474F3C | 4751FD B1 MulI2
27 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B1_MulI2.
Handler: 0x66105E38, shared by 2 dispatch slots (real opcode #174). This is the primary slot. Other slots: (1,AF) MulI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Integer
c = a * bDescription: draft, by claude-opus-4.7. Handler 0x66105E38, dispatch slot 0x66106FD8, modOpcodes line 1341.
MulI2
(1,0xAF)not emitteddup of (0,B1)handler #174Integerconfirmed_handlerAlias dispatch slot (1, 0xAF) for the canonical MulI2 at (0, 0xB1); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a * b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a * b):I2]
Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of * are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Dim a As Integer, b As Integer, c As Integer
c = a * b
Encoding, evidence and notes
Encoding: FB AF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E38, shared by 2 dispatch slots (real opcode #174). This is a duplicate slot of (0,B1) MulI2. Other slots: (0,B1) MulI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B1) MulI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105E38, dispatch slot 0x661073D0, modOpcodes line 1342.
MulI4
(0,0xB2)emittedprimary of 2handler #175Integerconfirmed_msdocs4 corpus hitsPops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a * b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a * b):I4]
Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of * are statically typed as Long. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Public Sub Main()
Dim a As Long, c As Long
c = a * 2
End Sub
Encoding, evidence and notes
Encoding: B2, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B2 MulI4
modZLIB.Proc_4666C0 @ 0x4666C0 | 46689E B2 MulI4
CPdfParser.Proc_457140 @ 0x457140 | 45720C B2 MulI4
frmRefactor.ScrollIncremental @ 0x440728 | 440731 B2 MulI4
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B2_MulI4.
Handler: 0x6610AB40, shared by 2 dispatch slots (real opcode #175). This is the primary slot. Other slots: (1,B0) MulI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a * bDescription: draft, by claude-opus-4.7. Handler 0x6610AB40, dispatch slot 0x66106FDC, modOpcodes line 1343.
MulI4
(1,0xB0)not emitteddup of (0,B2)handler #175Integerconfirmed_handlerAlias dispatch slot (1, 0xB0) for the canonical MulI4 at (0, 0xB2); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a * b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a * b):I4]
Arithmetic is two's-complement on the native width. On multiplication overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of * are statically typed as Long. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Dim a As Long, b As Long, c As Long
c = a * b
Encoding, evidence and notes
Encoding: FB B0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AB40, shared by 2 dispatch slots (real opcode #175). This is a duplicate slot of (0,B2) MulI4. Other slots: (0,B2) MulI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B2) MulI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610AB40, dispatch slot 0x661073D4, modOpcodes line 1344.
MulR4
(1,0xB1)not emitteddup of (0,B3)handler #176Floating pointconfirmed_msdocsPops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a * b, pushes the 32-bit IEEE 754 float (VB6 Single) result.
Stack: [..., a:R4, b:R4] -> [..., (a * b):R4]
IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of * are statically typed as Single. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Dim a As Single, b As Single, c As Single
c = a * b
Encoding, evidence and notes
Encoding: FB B1 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E50, shared by 3 dispatch slots (real opcode #176). This is a duplicate slot of (0,B3) MulR8. Other slots: (0,B3) MulR8, (1,B2) MulR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B3) MulR8 (same handler, different slot)
(0,0xB3) MulR8, (1,0xB2) MulR4
Description: draft, by claude-opus-4.7. Handler 0x66105E50, dispatch slot 0x661073D8, modOpcodes line 1351.
MulR4
(1,0xB2)not emitteddup of (0,B3)handler #176Floating pointconfirmed_handlerAlias dispatch slot (1, 0xB2) for the canonical MulR4 at (1, 0xB1); semantics are identical.
Pops two 32-bit IEEE 754 float (VB6 Single) operands b and a (top is b), computes a * b, pushes the 32-bit IEEE 754 float (VB6 Single) result.
Stack: [..., a:R4, b:R4] -> [..., (a * b):R4]
IEEE 754 single-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of * are statically typed as Single. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Dim a As Single, b As Single, c As Single
c = a * b
Encoding, evidence and notes
Encoding: FB B2 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E50, shared by 3 dispatch slots (real opcode #176). This is a duplicate slot of (0,B3) MulR8. Other slots: (0,B3) MulR8, (1,B1) MulR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B3) MulR8 (same handler, different slot)
(0,0xB3) MulR8, (1,0xB1) MulR4
Description: draft, by claude-opus-4.7. Handler 0x66105E50, dispatch slot 0x661073DC, modOpcodes line 1352.
MulR8
(0,0xB3)emittedprimary of 3handler #176Floating pointconfirmed_msdocs12 corpus hitsPops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a * b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a * b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of * are statically typed as Double. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Public Sub Main()
Dim a As Single, c As Single
c = a * 2.5
End Sub
Encoding, evidence and notes
Encoding: B3, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B3 MulR8
Form2.LongHex @ 0x441B00 | 441B17 B3 MulR8
Form2.Proc_4429BC @ 0x4429BC | 4429FA B3 MulR8
Form2.Proc_4429BC @ 0x4429BC | 442A0A B3 MulR8
12 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B3_MulR8.
Handler: 0x66105E50, shared by 3 dispatch slots (real opcode #176). This is the primary slot. Other slots: (1,B1) MulR4, (1,B2) MulR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 12 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Double, c As Double
c = a * b(1,0xB1) MulR4, (1,0xB2) MulR4
Description: draft, by claude-opus-4.7. Handler 0x66105E50, dispatch slot 0x66106FE0, modOpcodes line 1345.
MulUI1
(1,0xAE)emittedhandler #326Integerconfirmed_msdocsPops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a * b, pushes the 8-bit unsigned integer (VB6 Byte) result.
Stack: [..., a:UI1, b:UI1] -> [..., (a * b):UI1]
Emitted when both operands of * are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (MulR8 if Double appears; MulVar if Variant is involved).
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a * b
End Sub
Encoding, evidence and notes
Encoding: FB AE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBAE MulUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_AE_MulUI1.
Handler: 0x6610AB29, unique to this slot (real opcode #326).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a * bDescription: draft, by claude-opus-4.7. Handler 0x6610AB29, dispatch slot 0x661073CC, modOpcodes line 1350.
MulVar
(1,0xB4)emittedhandler #327Variantinferred_corpus4 corpus hitsPops two VBA Variant operands b and a (top is b), computes a * b, pushes the VBA Variant result.
Stack: [..., a:Var, b:Var] -> [..., (a * b):Var]
Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.
Emitted when at least one operand of * is a Variant. Same-typed primitive operands instead emit MulI2/MulI4/MulR4/MulR8/MulCy.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a * b
End Sub
Encoding, evidence and notes
Encoding: FB B4 (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBB4 3CFF MulVar var_C4
fso.Proc_44D3E8 @ 0x44D3E8 | 44D442 FBB4 3CFF MulVar var_C4
fso.Proc_44D3E8 @ 0x44D3E8 | 44D44D FBB4 FCFE MulVar var_104
b64.Proc_469B0C @ 0x469B0C | 469C12 FBB4 20FF MulVar var_E0
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_B4_MulVar.
Handler: 0x66105F54, unique to this slot (real opcode #327).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a * bDescription: draft, by claude-opus-4.7. Handler 0x66105F54, dispatch slot 0x661073E4, modOpcodes line 1353.
Math_Pwr
Power
PwrR8I2
(1,0xD0)not emittedhandler #334Floating pointconfirmed_msdocsPops a 16-bit signed integer (VB6 Integer) operand b (top) and a 64-bit IEEE 754 float (VB6 Double) operand a, computes a ^ b at R8 precision (the 16-bit signed integer (VB6 Integer) b is widened or coerced as needed), pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:I2] -> [..., (a ^ b):R8]
Double-precision arithmetic per IEEE 754. NaN and infinity propagate per the standard; out-of-range numeric values raise run-time error 6 in normal expression contexts.
Not emitted by VB6 SP6: d ^ n with n As Integer (and Integer literals) compiles to PwrR8R8 (1,CF) after converting the exponent to floating point.
Encoding, evidence and notes
Encoding: FB D0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610ADDB, unique to this slot (real opcode #334).
Description: draft, by claude-opus-5-5. Handler 0x6610ADDB, dispatch slot 0x66107454, modOpcodes line 1413.
PwrR8R8
(1,0xCF)emittedhandler #333Floating pointconfirmed_msdocsPops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a ^ b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a ^ b):R8]
Double-precision arithmetic per IEEE 754. NaN and infinity propagate per the standard; out-of-range numeric values raise run-time error 6 in normal expression contexts.
Emitted when both operands of ^ are statically typed as Double. Mixed-type expressions go through narrower or wider variants (PwrR8 if Double appears; PwrVar if Variant is involved).
Public Sub Main()
Dim a As Single, c As Single
c = a ^ 2.5
End Sub
Encoding, evidence and notes
Encoding: FB CF (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBCF PwrR8R8
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_CF_PwrR8R8.
Handler: 0x66105F01, unique to this slot (real opcode #333).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Double, b As Double, c As Double
c = a ^ bDescription: draft, by claude-opus-4.7. Handler 0x66105F01, dispatch slot 0x66107450, modOpcodes line 1412.
PwrVar
(1,0xCE)emittedhandler #332Variantinferred_corpus^); result Variant in a temporary.Pops two Variants, applies exponentiation (^) with VB's Variant coercion and Null-propagation rules, and writes the result Variant to the temporary %a, whose address is pushed.
Stack: [..., a:Var, b:Var] -> [..., r:Var]
Emitted when either operand of exponentiation (^) is a Variant.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a ^ b
End Sub
Encoding, evidence and notes
Encoding: FB CE (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBCE 3CFF PwrVar var_C4
FBCE 3CFF PwrVar var_C4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_CE_PwrVar.
Handler: 0x6610AE09, unique to this slot (real opcode #332).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a ^ b
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AE09, dispatch slot 0x6610744C, modOpcodes line 1414.
Math_Sub
Subtraction
SubCy
(0,0xB0)emittedprimary of 2handler #173Currencyconfirmed_msdocsPops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a - b, pushes the 64-bit scaled-integer Currency (×10^4) result.
Stack: [..., a:Cy, b:Cy] -> [..., (a - b):Cy]
Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.
Emitted when both operands of - are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Public Sub Main()
Dim a As Currency, b As Currency, c As Currency
c = a - b
End Sub
Encoding, evidence and notes
Encoding: B0, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B0 SubCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B0_SubCy.
Handler: 0x6610AB0E, shared by 2 dispatch slots (real opcode #173). This is the primary slot. Other slots: (1,9B) SubCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, b As Currency, c As Currency
c = a - bDescription: draft, by claude-opus-4.7. Handler 0x6610AB0E, dispatch slot 0x66106FD4, modOpcodes line 1333.
SubCy
(1,0x9B)not emitteddup of (0,B0)handler #173Currencyconfirmed_handlerAlias dispatch slot (1, 0x9B) for the canonical SubCy at (0, 0xB0); semantics are identical.
Pops two 64-bit scaled-integer Currency (×10^4) operands b and a (top is b), computes a - b, pushes the 64-bit scaled-integer Currency (×10^4) result.
Stack: [..., a:Cy, b:Cy] -> [..., (a - b):Cy]
Currency arithmetic on the underlying scaled 64-bit integer (4 implicit decimal places). Overflow raises run-time error 6.
Emitted when both operands of - are statically typed as Currency. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Dim a As Currency, b As Currency, c As Currency
c = a - b
Encoding, evidence and notes
Encoding: FB 9B (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AB0E, shared by 2 dispatch slots (real opcode #173). This is a duplicate slot of (0,B0) SubCy. Other slots: (0,B0) SubCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B0) SubCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610AB0E, dispatch slot 0x66107380, modOpcodes line 1334.
SubI2
(0,0xAD)emittedprimary of 2handler #170Integerconfirmed_msdocs3 corpus hitsPops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a - b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a - b):I2]
Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of - are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Public Sub Main()
Dim a As Integer, b As Integer, c As Integer
c = a - b
End Sub
Encoding, evidence and notes
Encoding: AD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AD SubI2
frmRefactor.Proc_4442D0 @ 0x4442D0 | 44432B AD SubI2
modEscapes.Proc_450068 @ 0x450068 | 450109 AD SubI2
frmManualFilters.Form_Load @ 0x454580 | 45462C AD SubI2
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AD_SubI2.
Handler: 0x66105DFD, shared by 2 dispatch slots (real opcode #170). This is the primary slot. Other slots: (1,97) SubI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Integer, b As Integer, c As Integer
c = a - bDescription: draft, by claude-opus-4.7. Handler 0x66105DFD, dispatch slot 0x66106FC8, modOpcodes line 1329.
SubI2
(1,0x97)not emitteddup of (0,AD)handler #170Integerconfirmed_handlerAlias dispatch slot (1, 0x97) for the canonical SubI2 at (0, 0xAD); semantics are identical.
Pops two 16-bit signed integer (VB6 Integer) operands b and a (top is b), computes a - b, pushes the 16-bit signed integer (VB6 Integer) result.
Stack: [..., a:I2, b:I2] -> [..., (a - b):I2]
Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of - are statically typed as Integer. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Dim a As Integer, b As Integer, c As Integer
c = a - b
Encoding, evidence and notes
Encoding: FB 97 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105DFD, shared by 2 dispatch slots (real opcode #170). This is a duplicate slot of (0,AD) SubI2. Other slots: (0,AD) SubI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AD) SubI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105DFD, dispatch slot 0x66107370, modOpcodes line 1330.
SubI4
(0,0xAE)emittedprimary of 2handler #171Integerconfirmed_msdocs120 corpus hitsPops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a - b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a - b):I4]
Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of - are statically typed as Long. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Public Sub Main()
Dim a As Long, b As Long, c As Long
c = a - b
End Sub
Encoding, evidence and notes
Encoding: AE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AE SubI4
Form1.mnuDecompressSWC_Click @ 0x45E9E4 | 45EB1F AE SubI4
Form1.mnuExtractURI_Click @ 0x45774C | 457850 AE SubI4
Form1.mnuSecureDownload_Click @ 0x456570 | 4565F7 AE SubI4
120 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AE_SubI4.
Handler: 0x66105E14, shared by 2 dispatch slots (real opcode #171). This is the primary slot. Other slots: (1,98) SubI4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 120 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, b As Long, c As Long
c = a - bDescription: draft, by claude-opus-4.7. Handler 0x66105E14, dispatch slot 0x66106FCC, modOpcodes line 1331.
SubI4
(1,0x98)not emitteddup of (0,AE)handler #171Integerconfirmed_handlerAlias dispatch slot (1, 0x98) for the canonical SubI4 at (0, 0xAE); semantics are identical.
Pops two 32-bit signed integer (VB6 Long) operands b and a (top is b), computes a - b, pushes the 32-bit signed integer (VB6 Long) result.
Stack: [..., a:I4, b:I4] -> [..., (a - b):I4]
Arithmetic is two's-complement on the native width. On subtraction overflow, VB6 raises run-time error 6 (Overflow). Handler-level wrap-vs-trap detail not yet verified.
Emitted when both operands of - are statically typed as Long. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Dim a As Long, b As Long, c As Long
c = a - b
Encoding, evidence and notes
Encoding: FB 98 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E14, shared by 2 dispatch slots (real opcode #171). This is a duplicate slot of (0,AE) SubI4. Other slots: (0,AE) SubI4.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AE) SubI4 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66105E14, dispatch slot 0x66107374, modOpcodes line 1332.
SubR8
(0,0xAF)emittedprimary of 3handler #172Floating pointconfirmed_msdocs100 corpus hitsPops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a - b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a - b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of - are statically typed as Double. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Public Sub Main()
Dim a As Single, b As Single, c As Single
c = a - b
End Sub
Encoding, evidence and notes
Encoding: AF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: AF SubR8
Form1.Form_Resize @ 0x474F3C | 475013 AF SubR8
Form1.Form_Resize @ 0x474F3C | 475019 AF SubR8
Form1.Form_Resize @ 0x474F3C | 475021 AF SubR8
100 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_AF_SubR8.
Handler: 0x66105E2A, shared by 3 dispatch slots (real opcode #172). This is the primary slot. Other slots: (1,99) SubR8, (1,9A) SubR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 100 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, b As Double, c As Double
c = a - b(1,0x99) SubR8, (1,0x9A) SubR8
Description: draft, by claude-opus-4.7. Handler 0x66105E2A, dispatch slot 0x66106FD0, modOpcodes line 1336.
SubR8
(1,0x99)not emitteddup of (0,AF)handler #172Floating pointconfirmed_handlerAlias dispatch slot (1, 0x99) for the canonical SubR8 at (0, 0xAF); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a - b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a - b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of - are statically typed as Double. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Dim a As Double, b As Double, c As Double
c = a - b
Encoding, evidence and notes
Encoding: FB 99 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E2A, shared by 3 dispatch slots (real opcode #172). This is a duplicate slot of (0,AF) SubR8. Other slots: (0,AF) SubR8, (1,9A) SubR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AF) SubR8 (same handler, different slot)
(0,0xAF) SubR8, (1,0x9A) SubR8
Description: draft, by claude-opus-4.7. Handler 0x66105E2A, dispatch slot 0x66107378, modOpcodes line 1337.
SubR8
(1,0x9A)not emitteddup of (0,AF)handler #172Floating pointconfirmed_handlerAlias dispatch slot (1, 0x9A) for the canonical SubR8 at (0, 0xAF); semantics are identical.
Pops two 64-bit IEEE 754 float (VB6 Double) operands b and a (top is b), computes a - b, pushes the 64-bit IEEE 754 float (VB6 Double) result.
Stack: [..., a:R8, b:R8] -> [..., (a - b):R8]
IEEE 754 double-precision arithmetic. NaN and infinity propagate per the standard; overflow yields +/-Inf (which the runtime then maps to runtime error 6 in normal expression contexts).
Emitted when both operands of - are statically typed as Double. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Dim a As Double, b As Double, c As Double
c = a - b
Encoding, evidence and notes
Encoding: FB 9A (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105E2A, shared by 3 dispatch slots (real opcode #172). This is a duplicate slot of (0,AF) SubR8. Other slots: (0,AF) SubR8, (1,99) SubR8.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,AF) SubR8 (same handler, different slot)
(0,0xAF) SubR8, (1,0x99) SubR8
Description: draft, by claude-opus-4.7. Handler 0x66105E2A, dispatch slot 0x6610737C, modOpcodes line 1338.
SubUI1
(1,0x96)emittedhandler #320Integerconfirmed_msdocsPops two 8-bit unsigned integer (VB6 Byte) operands b and a (top is b), computes a - b, pushes the 8-bit unsigned integer (VB6 Byte) result.
Stack: [..., a:UI1, b:UI1] -> [..., (a - b):UI1]
Emitted when both operands of - are statically typed as Byte. Mixed-type expressions go through narrower or wider variants (SubR8 if Double appears; SubVar if Variant is involved).
Public Sub Main()
Dim a As Byte, b As Byte, c As Byte
c = a - b
End Sub
Encoding, evidence and notes
Encoding: FB 96 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FB96 SubUI1
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_96_SubUI1.
Handler: 0x6610AAF8, unique to this slot (real opcode #320).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Byte, b As Byte, c As Byte
c = a - bDescription: draft, by claude-opus-4.7. Handler 0x6610AAF8, dispatch slot 0x6610736C, modOpcodes line 1335.
SubVar
(1,0x9C)emittedhandler #321Variantinferred_corpus47 corpus hitsPops two VBA Variant operands b and a (top is b), computes a - b, pushes the VBA Variant result.
Stack: [..., a:Var, b:Var] -> [..., (a - b):Var]
Variant operands are coerced and the result type promoted per VB6 rules (Integer -> Long -> Double; presence of Currency forces Currency; presence of String triggers numeric parsing). Type-mismatch raises run-time error 13; arithmetic overflow raises error 6.
Emitted when at least one operand of - is a Variant. Same-typed primitive operands instead emit SubI2/SubI4/SubR4/SubR8/SubCy.
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a - b
End Sub
Encoding, evidence and notes
Encoding: FB 9C (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FB9C 3CFF SubVar var_C4
fso.Proc_44BA68 @ 0x44BA68 | 44BB05 FB9C 3CFF SubVar var_C4
CPDFStream.Proc_45998C @ 0x45998C | 4599EB FB9C 34FF SubVar var_CC
CPDFStream.Proc_45998C @ 0x45998C | 459A48 FB9C 34FF SubVar var_CC
47 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_9C_SubVar.
Handler: 0x66105F4C, unique to this slot (real opcode #321).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 47 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
c = a - bDescription: draft, by claude-opus-4.7. Handler 0x66105F4C, dispatch slot 0x66107384, modOpcodes line 1339.
Math_UnaryMinus
Unary minus
UMiCy
(0,0xBA)emittedprimary of 2handler #183Currencyconfirmed_msdocsPops a of type 64-bit scaled-integer Currency (×10^4), pushes -a of the same type.
Stack: [..., a:Cy] -> [..., (-a):Cy]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Currency-typed operand.
Public Sub Main()
Dim a As Currency, c As Currency
c = -a
End Sub
Encoding, evidence and notes
Encoding: BA, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: BA UMiCy
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_BA_UMiCy.
Handler: 0x6610AC8C, shared by 2 dispatch slots (real opcode #183). This is the primary slot. Other slots: (1,CB) UMiCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Currency, c As Currency
c = -aDescription: draft, by claude-opus-4.7. Handler 0x6610AC8C, dispatch slot 0x66106FFC, modOpcodes line 1371.
UMiCy
(1,0xCB)not emitteddup of (0,BA)handler #183Currencyconfirmed_handlerAlias dispatch slot (1, 0xCB) for the canonical UMiCy at (0, 0xBA); semantics are identical.
Pops a of type 64-bit scaled-integer Currency (×10^4), pushes -a of the same type.
Stack: [..., a:Cy] -> [..., (-a):Cy]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Currency-typed operand.
Dim a As Currency, c As Currency
c = -a
Encoding, evidence and notes
Encoding: FB CB (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AC8C, shared by 2 dispatch slots (real opcode #183). This is a duplicate slot of (0,BA) UMiCy. Other slots: (0,BA) UMiCy.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,BA) UMiCy (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610AC8C, dispatch slot 0x66107440, modOpcodes line 1372.
UMiI2
(0,0xB7)emittedprimary of 2handler #180Integerconfirmed_msdocsPops a of type 16-bit signed integer (VB6 Integer), pushes -a of the same type.
Stack: [..., a:I2] -> [..., (-a):I2]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Integer-typed operand.
Public Sub Main()
Dim a As Integer, c As Integer
c = -a
End Sub
Encoding, evidence and notes
Encoding: B7, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B7 UMiI2
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B7_UMiI2.
Handler: 0x6610AC53, shared by 2 dispatch slots (real opcode #180). This is the primary slot. Other slots: (1,C7) UMiI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Dim a As Integer, c As Integer
c = -aDescription: draft, by claude-opus-4.7. Handler 0x6610AC53, dispatch slot 0x66106FF0, modOpcodes line 1366.
UMiI2
(1,0xC7)not emitteddup of (0,B7)handler #180Integerconfirmed_handlerAlias dispatch slot (1, 0xC7) for the canonical UMiI2 at (0, 0xB7); semantics are identical.
Pops a of type 16-bit signed integer (VB6 Integer), pushes -a of the same type.
Stack: [..., a:I2] -> [..., (-a):I2]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Integer-typed operand.
Dim a As Integer, c As Integer
c = -a
Encoding, evidence and notes
Encoding: FB C7 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AC53, shared by 2 dispatch slots (real opcode #180). This is a duplicate slot of (0,B7) UMiI2. Other slots: (0,B7) UMiI2.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B7) UMiI2 (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x6610AC53, dispatch slot 0x66107430, modOpcodes line 1367.
UMiI2
(1,0xC8)not emitteddup of (0,B8)handler #181Integerconfirmed_msdocsNegates the 32-bit value on top of the stack in place (neg dword ptr [esp]).
Stack: [..., a:I4] -> [..., -a:I4]
Not emitted by VB6 SP6. Phase 3b found this slot's handler negates a dword (UMiI4 behaviour), unlike UMiI2 (0,B7). -n with Integer uses (0,B7) and with Long (0,B8).
Encoding, evidence and notes
Encoding: FB C8 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AC69, shared by 2 dispatch slots (real opcode #181). This is a duplicate slot of (0,B8) UMiI4. Other slots: (0,B8) UMiI4.
Description: draft, by claude-opus-5-5. Handler 0x6610AC69, dispatch slot 0x66107434, modOpcodes line 1368.
UMiI4
(0,0xB8)emittedprimary of 2handler #181Integerconfirmed_msdocs2 corpus hitsPops a of type 32-bit signed integer (VB6 Long), pushes -a of the same type.
Stack: [..., a:I4] -> [..., (-a):I4]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Long-typed operand.
Public Sub Main()
Dim a As Long, c As Long
c = -a
End Sub
Encoding, evidence and notes
Encoding: B8, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B8 UMiI4
frmRefactor.ScrollPage @ 0x4488F4 | 448937 B8 UMiI4
frmRefactor.ScrollPage @ 0x4488F4 | 44897A B8 UMiI4
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B8_UMiI4.
Handler: 0x6610AC69, shared by 2 dispatch slots (real opcode #181). This is the primary slot. Other slots: (1,C8) UMiI2.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Long, c As Long
c = -aDescription: draft, by claude-opus-4.7. Handler 0x6610AC69, dispatch slot 0x66106FF4, modOpcodes line 1369.
UMiR4
(1,0xC9)not emitteddup of (0,B9)handler #182Floating pointconfirmed_msdocsPops a of type 32-bit IEEE 754 float (VB6 Single), pushes -a of the same type.
Stack: [..., a:R4] -> [..., (-a):R4]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Single-typed operand.
Dim a As Single, c As Single
c = -a
Encoding, evidence and notes
Encoding: FB C9 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AC7E, shared by 3 dispatch slots (real opcode #182). This is a duplicate slot of (0,B9) UMiR8. Other slots: (0,B9) UMiR8, (1,CA) UMiR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B9) UMiR8 (same handler, different slot)
(0,0xB9) UMiR8, (1,0xCA) UMiR4
Description: draft, by claude-opus-4.7. Handler 0x6610AC7E, dispatch slot 0x66107438, modOpcodes line 1373.
UMiR4
(1,0xCA)not emitteddup of (0,B9)handler #182Floating pointconfirmed_handlerAlias dispatch slot (1, 0xCA) for the canonical UMiR4 at (1, 0xC9); semantics are identical.
Pops a of type 32-bit IEEE 754 float (VB6 Single), pushes -a of the same type.
Stack: [..., a:R4] -> [..., (-a):R4]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Single-typed operand.
Dim a As Single, c As Single
c = -a
Encoding, evidence and notes
Encoding: FB CA (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AC7E, shared by 3 dispatch slots (real opcode #182). This is a duplicate slot of (0,B9) UMiR8. Other slots: (0,B9) UMiR8, (1,C9) UMiR4.
Finding: Phase 4: Single arithmetic and comparisons compile to the R8 FPU opcodes (AddR8, LtR8, and so on). Operands are loaded with FLdFPR4 and stored with FStFPR4. This *R4 slot was never emitted.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,B9) UMiR8 (same handler, different slot)
(0,0xB9) UMiR8, (1,0xC9) UMiR4
Description: draft, by claude-opus-4.7. Handler 0x6610AC7E, dispatch slot 0x6610743C, modOpcodes line 1374.
UMiR8
(0,0xB9)emittedprimary of 3handler #182Floating pointconfirmed_msdocs2 corpus hitsPops a of type 64-bit IEEE 754 float (VB6 Double), pushes -a of the same type.
Stack: [..., a:R8] -> [..., (-a):R8]
For integer types, two's-complement negation; -MinValue raises overflow (error 6). For floating types, sign-bit flip per IEEE 754. Variant variant respects subtype.
Emitted for unary - against Double-typed operand.
Public Sub Main()
Dim a As Single, c As Single
c = -a
End Sub
Encoding, evidence and notes
Encoding: B9, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: B9 UMiR8
frmFuncGraph.Proc_443640 @ 0x443640 | 4436A2 B9 UMiR8
frmFuncGraph.Proc_4439B0 @ 0x4439B0 | 443A12 B9 UMiR8
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_B9_UMiR8.
Handler: 0x6610AC7E, shared by 3 dispatch slots (real opcode #182). This is the primary slot. Other slots: (1,C9) UMiR4, (1,CA) UMiR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Double, c As Double
c = -a(1,0xC9) UMiR4, (1,0xCA) UMiR4
Description: draft, by claude-opus-4.7. Handler 0x6610AC7E, dispatch slot 0x66106FF8, modOpcodes line 1370.
UMiVar
(1,0xCC)emittedhandler #331Variantinferred_corpusPops a Variant, applies unary minus (Null propagates) and writes the result Variant to the temporary %a.
Stack: [..., a:Var] -> [..., r:Var]
Emitted for unary minus applied to a Variant.
Public Sub Main()
Dim a As Variant, c As Variant
c = -a
End Sub
Encoding, evidence and notes
Encoding: FB CC (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBCC 4CFF UMiVar var_B4
FBCC 4CFF UMiVar var_B4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_CC_UMiVar.
Handler: 0x66105F26, unique to this slot (real opcode #331).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, c As Variant
c = -a
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105F26, dispatch slot 0x66107444, modOpcodes line 1375.
Mem_PR_Load
Member load via PR register Prefix: PR
MemLdFPR4
(0,0x8C)emittedprimary of 2handler #137Floating pointconfirmed_handlerpr.Reads a Single, moved through the FPU (fld/fstp dword), and pushes it from a field at an offset from the cached object pointer pr.
Stack: [...] -> [..., v:FPR4]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for reads of a field at an offset from the cached object pointer pr when the value is a Single. The storage class selects the prefix (Mem); the value class selects the suffix (FPR4).
Public Sub Main()
Static a As Single
Dim b As Single
b = a
End Sub
Encoding, evidence and notes
Encoding: 8C, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 8C 0000 MemLdFPR4 [pr + 0x0]
8C 0000 MemLdFPR4 [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8C_MemLdFPR4.
Handler: 0x6610AE76, shared by 2 dispatch slots (real opcode #137). This is the primary slot. Other slots: (3,79) MemLdFPR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Single
Dim b As Single
b = a
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AE76, dispatch slot 0x66106F44, modOpcodes line 1029.
MemLdFPR4
(3,0x79)not emitteddup of (0,8C)handler #137Floating pointinferred_corpuspr.Encoding, evidence and notes
Encoding: FD 79 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AE76, shared by 2 dispatch slots (real opcode #137). This is a duplicate slot of (0,8C) MemLdFPR4. Other slots: (0,8C) MemLdFPR4.
Description: none. Handler 0x6610AE76, dispatch slot 0x66107AF8, modOpcodes line 1003.
MemLdFPR8
(0,0x8D)emittedprimary of 2handler #138Floating pointconfirmed_handlerpr.Reads a Double or Date, moved through the FPU (fld/fstp qword), and pushes it from a field at an offset from the cached object pointer pr.
Stack: [...] -> [..., v:FPR8]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for reads of a field at an offset from the cached object pointer pr when the value is a Double/Date. The storage class selects the prefix (Mem); the value class selects the suffix (FPR8).
Public Sub Main()
Static a As Date
Dim b As Date
b = a
End Sub
Encoding, evidence and notes
Encoding: 8D, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 8D 0000 MemLdFPR8 [pr + 0x0]
8D 0000 MemLdFPR8 [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8D_MemLdFPR8.
Handler: 0x6610AE8E, shared by 2 dispatch slots (real opcode #138). This is the primary slot. Other slots: (3,7A) MemLdFPR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Date
Dim b As Date
b = a
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AE8E, dispatch slot 0x66106F48, modOpcodes line 1030.
MemLdFPR8
(3,0x7A)not emitteddup of (0,8D)handler #138Floating pointinferred_corpuspr.Encoding, evidence and notes
Encoding: FD 7A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AE8E, shared by 2 dispatch slots (real opcode #138). This is a duplicate slot of (0,8D) MemLdFPR8. Other slots: (0,8D) MemLdFPR8.
Description: none. Handler 0x6610AE8E, dispatch slot 0x66107AFC, modOpcodes line 1004.
MemLdI2
(0,0x89)emittedprimary of 2handler #134Integerconfirmed_handler46 corpus hits[pr + offset] where pr is on the stack.Alias dispatch slot (0, 0x89) for the canonical MemLdI2 at (3, 0x71); semantics are identical.
Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.
Stack: [..., pr:Pr] -> [..., (*(pr+offset)):I2]
Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.
Emitted when reading a I2-typed field through an object pointer already on the stack.
Public Sub Main()
Static a As Boolean
Dim b As Boolean
b = a
End Sub
Encoding, evidence and notes
Encoding: 89, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 89 0000 MemLdI2 [pr + 0x0]
Form1.mnuEnableJBIG2_Click @ 0x4490FC | 4490FF 89 8600 MemLdI2 [pr + 0x86]
Form1.mnuHideDups_Click @ 0x4629E4 | 4629E7 89 8400 MemLdI2 [pr + 0x84]
Form1.mnuHideDups_Click @ 0x4629E4 | 462BFE 89 8400 MemLdI2 [pr + 0x84]
46 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_89_MemLdI2.
Handler: 0x66105F9A, shared by 2 dispatch slots (real opcode #134). This is the primary slot. Other slots: (3,71) MemLdI2.
Corpus: 46 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105F9A, dispatch slot 0x66106F38, modOpcodes line 1026.
MemLdI2
(3,0x71)not emitteddup of (0,89)handler #134Integerinferred_corpus[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 71 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105F9A, shared by 2 dispatch slots (real opcode #134). This is a duplicate slot of (0,89) MemLdI2. Other slots: (0,89) MemLdI2.
Description: none. Handler 0x66105F9A, dispatch slot 0x66107AD8, modOpcodes line 995.
MemLdPr
(0,0x58)emittedprimary of 2handler #86Object / COMconfirmed_handler120 corpus hits[pr + offset] where pr is on the stack.Alias dispatch slot (0, 0x58) for the canonical MemLdPr at (3, 0x7B); semantics are identical.
Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.
Stack: [..., pr:Pr] -> [..., (*(pr+offset)):Pr]
Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.
Emitted when reading a Pr-typed field through an object pointer already on the stack.
Public Sub Main()
Dim o As Object
End Sub
' ---- UC1.ctl
Private Sub UserControl_Resize()
Dim x As Single
x = UserControl.Width
End Sub
Encoding, evidence and notes
Encoding: 58, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 58 1000 MemLdPr [pr + 0x10]
Form1.LoadPlugins @ 0x4644FC | 464794 58 0000 MemLdPr [pr + 0x0]
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 46149F 58 3400 MemLdPr [pr + 0x34]
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A838 58 3400 MemLdPr [pr + 0x34]
120 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_58_MemLdPr.
Handler: 0x661062CA, shared by 2 dispatch slots (real opcode #86). This is the primary slot. Other slots: (3,7B) MemLdPr.
Finding: Probe: a UserControl/UserDocument/PropertyPage reading its own base object (UserControl.Width) loads it from [pr+0x10] with this opcode. Not emitted by Exe/DLL classes or forms.
Corpus: 120 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661062CA, dispatch slot 0x66106E74, modOpcodes line 1036.
MemLdPr
(3,0x7B)not emitteddup of (0,58)handler #86Object / COMinferred_corpus[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 7B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661062CA, shared by 2 dispatch slots (real opcode #86). This is a duplicate slot of (0,58) MemLdPr. Other slots: (0,58) MemLdPr.
Description: none. Handler 0x661062CA, dispatch slot 0x66107B00, modOpcodes line 1005.
MemLdR4
(3,0x72)not emitteddup of (0,8A)handler #135Integerinferred_corpus[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 72 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,73) MemLdR4, (3,77) MemLdR4, (3,78) MemLdR4.
(0,0x8A) MemLdStr, (3,0x73) MemLdR4, (3,0x77) MemLdR4, (3,0x78) MemLdR4
Description: none. Handler 0x66105FB4, dispatch slot 0x66107ADC, modOpcodes line 996.
MemLdR4
(3,0x73)not emitteddup of (0,8A)handler #135Integerconfirmed_handler[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 73 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,72) MemLdR4, (3,77) MemLdR4, (3,78) MemLdR4.
(0,0x8A) MemLdStr, (3,0x72) MemLdR4, (3,0x77) MemLdR4, (3,0x78) MemLdR4
Description: none. Handler 0x66105FB4, dispatch slot 0x66107AE0, modOpcodes line 997.
MemLdR4
(3,0x77)not emitteddup of (0,8A)handler #135Integerconfirmed_handler[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 77 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,72) MemLdR4, (3,73) MemLdR4, (3,78) MemLdR4.
(0,0x8A) MemLdStr, (3,0x72) MemLdR4, (3,0x73) MemLdR4, (3,0x78) MemLdR4
Description: none. Handler 0x66105FB4, dispatch slot 0x66107AF0, modOpcodes line 1001.
MemLdR4
(3,0x78)not emitteddup of (0,8A)handler #135Integerconfirmed_handler[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 78 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is a duplicate slot of (0,8A) MemLdStr. Other slots: (0,8A) MemLdStr, (3,72) MemLdR4, (3,73) MemLdR4, (3,77) MemLdR4.
(0,0x8A) MemLdStr, (3,0x72) MemLdR4, (3,0x73) MemLdR4, (3,0x77) MemLdR4
Description: none. Handler 0x66105FB4, dispatch slot 0x66107AF4, modOpcodes line 1002.
MemLdR8
(0,0x8B)emittedprimary of 3handler #136Currencyconfirmed_handlerpr.Reads a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and pushes it from a field at an offset from the cached object pointer pr.
Stack: [...] -> [..., v:R8]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for reads of a field at an offset from the cached object pointer pr when the value is a 8-byte value. The storage class selects the prefix (Mem); the value class selects the suffix (R8).
Public Sub Main()
Static a As Currency
Dim b As Currency
b = a
End Sub
Encoding, evidence and notes
Encoding: 8B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 8B 0000 MemLdR8 [pr + 0x0]
8B 0000 MemLdR8 [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8B_MemLdR8.
Handler: 0x6610AE5A, shared by 3 dispatch slots (real opcode #136). This is the primary slot. Other slots: (3,74) MemLdR8, (3,75) MemLdR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Currency
Dim b As Currency
b = a
End Sub(3,0x74) MemLdR8, (3,0x75) MemLdR8
Description: draft, by claude-opus-5-5. Handler 0x6610AE5A, dispatch slot 0x66106F40, modOpcodes line 1028.
MemLdR8
(3,0x74)not emitteddup of (0,8B)handler #136Currencyinferred_corpuspr.Encoding, evidence and notes
Encoding: FD 74 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AE5A, shared by 3 dispatch slots (real opcode #136). This is a duplicate slot of (0,8B) MemLdR8. Other slots: (0,8B) MemLdR8, (3,75) MemLdR8.
(0,0x8B) MemLdR8, (3,0x75) MemLdR8
Description: none. Handler 0x6610AE5A, dispatch slot 0x66107AE4, modOpcodes line 998.
MemLdR8
(3,0x75)not emitteddup of (0,8B)handler #136Currencyconfirmed_handlerpr.Encoding, evidence and notes
Encoding: FD 75 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AE5A, shared by 3 dispatch slots (real opcode #136). This is a duplicate slot of (0,8B) MemLdR8. Other slots: (0,8B) MemLdR8, (3,74) MemLdR8.
(0,0x8B) MemLdR8, (3,0x74) MemLdR8
Description: none. Handler 0x6610AE5A, dispatch slot 0x66107AE8, modOpcodes line 999.
MemLdRfVar
(0,0x06)emittedprimary of 3handler #5Stack & frameinferred_corpus197 corpus hits[pr + offset] where pr is on the stack.Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.
Stack: [..., pr:Pr] -> [..., (*(pr+offset)):RfVar]
Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.
Emitted when reading a RfVar-typed field through an object pointer already on the stack.
Public Sub Main()
Static a As Variant
Dim b As Variant
b = a
End Sub
Encoding, evidence and notes
Encoding: 06, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 06 0000 MemLdRfVar [pr + 0x0]
Form1.LoadPlugins @ 0x4644FC | 464607 06 4C00 MemLdRfVar [pr + 0x4C]
Form1.LoadPlugins @ 0x4644FC | 464637 06 4C00 MemLdRfVar [pr + 0x4C]
Form1.mnub64decode_Click @ 0x451280 | 4512AC 06 3800 MemLdRfVar [pr + 0x38]
197 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_06_MemLdRfVar.
Handler: 0x66105FCC, shared by 3 dispatch slots (real opcode #5). This is the primary slot. Other slots: (3,76) MemLdRfVar, (3,7C) MemLdRfVar.
Corpus: 197 occurrence(s) in PDFStreamDumper_p.exe.
(3,0x76) MemLdRfVar, (3,0x7C) MemLdRfVar
Description: draft, by claude-opus-4.7. Handler 0x66105FCC, dispatch slot 0x66106D2C, modOpcodes line 993.
MemLdRfVar
(3,0x76)not emitteddup of (0,06)handler #5Stack & frameconfirmed_handler[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 76 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FCC, shared by 3 dispatch slots (real opcode #5). This is a duplicate slot of (0,06) MemLdRfVar. Other slots: (0,06) MemLdRfVar, (3,7C) MemLdRfVar.
(0,0x06) MemLdRfVar, (3,0x7C) MemLdRfVar
Description: none. Handler 0x66105FCC, dispatch slot 0x66107AEC, modOpcodes line 1000.
MemLdRfVar
(3,0x7C)not emitteddup of (0,06)handler #5Stack & frameconfirmed_handler[pr + offset] where pr is on the stack.Encoding, evidence and notes
Encoding: FD 7C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FCC, shared by 3 dispatch slots (real opcode #5). This is a duplicate slot of (0,06) MemLdRfVar. Other slots: (0,06) MemLdRfVar, (3,76) MemLdRfVar.
(0,0x06) MemLdRfVar, (3,0x76) MemLdRfVar
Description: none. Handler 0x66105FCC, dispatch slot 0x66107B04, modOpcodes line 1006.
MemLdStr
(0,0x8A)emittedprimary of 5handler #135Stringinferred_corpus177 corpus hits[pr + offset] where pr is on the stack.Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.
Stack: [..., pr:Pr] -> [..., (*(pr+offset)):Str]
Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.
Emitted when reading a Str-typed field through an object pointer already on the stack.
Public Sub Main()
Static a As Long
Dim b As Long
b = a
End Sub
Encoding, evidence and notes
Encoding: 8A, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 8A 0000 MemLdStr [pr + 0x0]
Form1.LoadPlugins @ 0x4644FC | 46468C 8A 4C00 MemLdStr [pr + 0x4C]
Form1.LoadPlugins @ 0x4644FC | 464777 8A 4C00 MemLdStr [pr + 0x4C]
Form1.LoadPlugins @ 0x4644FC | 464790 8A 4C00 MemLdStr [pr + 0x4C]
177 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8A_MemLdStr.
Handler: 0x66105FB4, shared by 5 dispatch slots (real opcode #135). This is the primary slot. Other slots: (3,72) MemLdR4, (3,73) MemLdR4, (3,77) MemLdR4, (3,78) MemLdR4.
Corpus: 177 occurrence(s) in PDFStreamDumper_p.exe.
(3,0x72) MemLdR4, (3,0x73) MemLdR4, (3,0x77) MemLdR4, (3,0x78) MemLdR4
Description: draft, by claude-opus-4.7. Handler 0x66105FB4, dispatch slot 0x66106F3C, modOpcodes line 1027.
MemLdUI1
(3,0x70)emittedhandler #535Integerinferred_corpus2 corpus hits[pr + offset] where pr is on the stack.Pops an object pointer pr from the stack, reads a member at compile-time-known offset (operand %2), and pushes the value.
Stack: [..., pr:Pr] -> [..., (*(pr+offset)):UI1]
Used by VB6 to access fields of Me, class instances, and module-level structures via their object descriptor.
Emitted when reading a UI1-typed field through an object pointer already on the stack.
Public Sub Main()
Static a As Byte
Dim b As Byte
b = a
End Sub
Encoding, evidence and notes
Encoding: FD 70 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD70 0000 MemLdUI1 [pr + 0x0]
lzma.Proc_46E084 @ 0x46E084 | 46E190 FD70 0000 MemLdUI1 [pr + 0x0]
lzma.Proc_46E084 @ 0x46E084 | 46E241 FD70 0000 MemLdUI1 [pr + 0x0]
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_70_MemLdUI1.
Handler: 0x6610AE40, unique to this slot (real opcode #535).
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610AE40, dispatch slot 0x66107AD4, modOpcodes line 994.
MemLdVar
(3,0x7D)not emittedhandler #536Variantinferred_corpusEncoding, evidence and notes
Encoding: FD 7D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B141, unique to this slot (real opcode #536).
Description: none. Handler 0x6610B141, dispatch slot 0x66107B08, modOpcodes line 1007.
Mem_PR_Store
Member store via PR register Prefix: PR
MemStAd
(3,0x88)emittedhandler #540Object / COMinferred_corpus30 corpus hits[pr + offset] (pr on the stack).Pops the value and an object pointer, writes value at pr+offset (operand %2).
Stack: [..., pr:Pr, v:Ad] -> [...]
Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).
Emitted when writing a Ad-typed field through an object pointer.
Public Sub Main()
Static a As Object
Dim b As Object
Set a = New Collection
End Sub
Encoding, evidence and notes
Encoding: FD 88 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD88 0000 MemStAd [pr + 0x0]
Form1.lv_ItemClick @ 0x445424 | 445470 FD88 3400 MemStAd [pr + 0x34]
Form1.lv2_ItemClick @ 0x445104 | 445150 FD88 3400 MemStAd [pr + 0x34]
Form1.lvSearch_ItemClick(ByVal Item As ListItem) @ 0x44F68C | 44F6CD FD88 3400 MemStAd [pr + 0x34]
30 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_88_MemStAd.
Handler: 0x661063B1, unique to this slot (real opcode #540).
Corpus: 30 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661063B1, dispatch slot 0x66107B34, modOpcodes line 1016.
MemStAdFunc
(3,0x8F)not emittedhandler #545Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FD 8F (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B3CA, unique to this slot (real opcode #545).
Description: none. Handler 0x6610B3CA, dispatch slot 0x66107B50, modOpcodes line 1023.
MemStCy
(3,0x84)not emitteddup of (0,90)handler #141Currencyinferred_corpuspr.Encoding, evidence and notes
Encoding: FD 84 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AEBF, shared by 3 dispatch slots (real opcode #141). This is a duplicate slot of (0,90) MemStR8. Other slots: (0,90) MemStR8, (3,85) MemStCy.
(0,0x90) MemStR8, (3,0x85) MemStCy
Description: none. Handler 0x6610AEBF, dispatch slot 0x66107B24, modOpcodes line 1012.
MemStCy
(3,0x85)not emitteddup of (0,90)handler #141Currencyconfirmed_handlerpr.Encoding, evidence and notes
Encoding: FD 85 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AEBF, shared by 3 dispatch slots (real opcode #141). This is a duplicate slot of (0,90) MemStR8. Other slots: (0,90) MemStR8, (3,84) MemStCy.
(0,0x90) MemStR8, (3,0x84) MemStCy
Description: none. Handler 0x6610AEBF, dispatch slot 0x66107B28, modOpcodes line 1013.
MemStFPR4
(0,0x91)emittedprimary of 2handler #142Floating pointconfirmed_handlerpr.Pops a Single, moved through the FPU (fld/fstp dword), and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:FPR4] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Single. The storage class selects the prefix (Mem); the value class selects the suffix (FPR4).
Public Sub Main()
Static a As Single
Dim b As Single
a = 1.5!
End Sub
Encoding, evidence and notes
Encoding: 91, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 91 0000 MemStFPR4 [pr + 0x0]
91 0000 MemStFPR4 [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_91_MemStFPR4.
Handler: 0x6610AEDB, shared by 2 dispatch slots (real opcode #142). This is the primary slot. Other slots: (3,89) MemStFPR4.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Single
Dim b As Single
a = 1.5!
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AEDB, dispatch slot 0x66106F58, modOpcodes line 1034.
MemStFPR4
(3,0x89)not emitteddup of (0,91)handler #142Floating pointinferred_corpuspr.Encoding, evidence and notes
Encoding: FD 89 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AEDB, shared by 2 dispatch slots (real opcode #142). This is a duplicate slot of (0,91) MemStFPR4. Other slots: (0,91) MemStFPR4.
Description: none. Handler 0x6610AEDB, dispatch slot 0x66107B38, modOpcodes line 1017.
MemStFPR8
(0,0x92)emittedprimary of 2handler #143Floating pointconfirmed_handlerpr.Pops a Double or Date, moved through the FPU (fld/fstp qword), and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:FPR8] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Double/Date. The storage class selects the prefix (Mem); the value class selects the suffix (FPR8).
Public Sub Main()
Static a As Date
Dim b As Date
a = #1/1/2000#
End Sub
Encoding, evidence and notes
Encoding: 92, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 92 0000 MemStFPR8 [pr + 0x0]
92 0000 MemStFPR8 [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_92_MemStFPR8.
Handler: 0x6610AEFD, shared by 2 dispatch slots (real opcode #143). This is the primary slot. Other slots: (3,8A) MemStFPR8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Date
Dim b As Date
a = #1/1/2000#
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610AEFD, dispatch slot 0x66106F5C, modOpcodes line 1035.
MemStFPR8
(3,0x8A)not emitteddup of (0,92)handler #143Floating pointinferred_corpuspr.Encoding, evidence and notes
Encoding: FD 8A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610AEFD, shared by 2 dispatch slots (real opcode #143). This is a duplicate slot of (0,92) MemStFPR8. Other slots: (0,92) MemStFPR8.
Description: none. Handler 0x6610AEFD, dispatch slot 0x66107B3C, modOpcodes line 1018.
MemStI2
(0,0x8E)emittedprimary of 2handler #139Integerconfirmed_handler48 corpus hits[pr + offset] (pr on the stack).Alias dispatch slot (0, 0x8E) for the canonical MemStI2 at (3, 0x81); semantics are identical.
Pops the value and an object pointer, writes value at pr+offset (operand %2).
Stack: [..., pr:Pr, v:I2] -> [...]
Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).
Emitted when writing a I2-typed field through an object pointer.
Public Sub Main()
Static a As Boolean
Dim b As Boolean
a = True
End Sub
Encoding, evidence and notes
Encoding: 8E, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 8E 0000 MemStI2 [pr + 0x0]
Form1.cmdBrowse_Click @ 0x445294 | 445299 8E 3C00 MemStI2 [pr + 0x3C]
Form1.cmdDecode_Click @ 0x4775C0 | 477D05 8E 8400 MemStI2 [pr + 0x84]
Form1.cmdDecode_Click @ 0x4775C0 | 477D5A 8E 8400 MemStI2 [pr + 0x84]
48 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8E_MemStI2.
Handler: 0x66105FE4, shared by 2 dispatch slots (real opcode #139). This is the primary slot. Other slots: (3,81) MemStI2.
Corpus: 48 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66105FE4, dispatch slot 0x66106F4C, modOpcodes line 1031.
MemStI2
(3,0x81)not emitteddup of (0,8E)handler #139Integerinferred_corpus[pr + offset] (pr on the stack).Encoding, evidence and notes
Encoding: FD 81 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FE4, shared by 2 dispatch slots (real opcode #139). This is a duplicate slot of (0,8E) MemStI2. Other slots: (0,8E) MemStI2.
Description: none. Handler 0x66105FE4, dispatch slot 0x66107B18, modOpcodes line 1009.
MemStI4
(0,0x8F)emittedprimary of 3handler #140Integerinferred_corpus57 corpus hits[pr + offset] (pr on the stack).Pops the value and an object pointer, writes value at pr+offset (operand %2).
Stack: [..., pr:Pr, v:I4] -> [...]
Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).
Emitted when writing a I4-typed field through an object pointer.
Public Sub Main()
Static a As Long
Dim b As Long
a = 70000
End Sub
Encoding, evidence and notes
Encoding: 8F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 8F 0000 MemStI4 [pr + 0x0]
Form1.parser_NewStream @ 0x472690 | 472A75 8F 6800 MemStI4 [pr + 0x68]
Form1.parser_NewStream @ 0x472690 | 472A9E 8F 7400 MemStI4 [pr + 0x74]
Form1.parser_NewStream @ 0x472690 | 472AC7 8F 6C00 MemStI4 [pr + 0x6C]
57 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_8F_MemStI4.
Handler: 0x66105FFE, shared by 3 dispatch slots (real opcode #140). This is the primary slot. Other slots: (3,82) MemStR4, (3,83) MemStR4.
Corpus: 57 occurrence(s) in PDFStreamDumper_p.exe.
(3,0x82) MemStR4, (3,0x83) MemStR4
Description: draft, by claude-opus-4.7. Handler 0x66105FFE, dispatch slot 0x66106F50, modOpcodes line 1032.
MemStR4
(3,0x82)not emitteddup of (0,8F)handler #140Integerinferred_corpus[pr + offset] (pr on the stack).Encoding, evidence and notes
Encoding: FD 82 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FFE, shared by 3 dispatch slots (real opcode #140). This is a duplicate slot of (0,8F) MemStI4. Other slots: (0,8F) MemStI4, (3,83) MemStR4.
(0,0x8F) MemStI4, (3,0x83) MemStR4
Description: none. Handler 0x66105FFE, dispatch slot 0x66107B1C, modOpcodes line 1010.
MemStR4
(3,0x83)not emitteddup of (0,8F)handler #140Integerconfirmed_handler[pr + offset] (pr on the stack).Encoding, evidence and notes
Encoding: FD 83 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66105FFE, shared by 3 dispatch slots (real opcode #140). This is a duplicate slot of (0,8F) MemStI4. Other slots: (0,8F) MemStI4, (3,82) MemStR4.
(0,0x8F) MemStI4, (3,0x82) MemStR4
Description: none. Handler 0x66105FFE, dispatch slot 0x66107B20, modOpcodes line 1011.
MemStR8
(0,0x90)emittedprimary of 3handler #141Currencyinferred_corpuspr.Pops a raw 64-bit value (in practice a Currency; Double/Date use the FPR8 forms), and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:R8] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
The R8 suffix denotes a raw 8-byte move, not a floating-point type. Phase 4 probes show it used for Currency values. Single/Double values use the FPR4/FPR8 forms.
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a 8-byte value. The storage class selects the prefix (Mem); the value class selects the suffix (R8).
Public Sub Main()
Static a As Currency
Dim b As Currency
a = 1.5@
End Sub
Encoding, evidence and notes
Encoding: 90, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 90 0000 MemStR8 [pr + 0x0]
90 0000 MemStR8 [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_90_MemStR8.
Handler: 0x6610AEBF, shared by 3 dispatch slots (real opcode #141). This is the primary slot. Other slots: (3,84) MemStCy, (3,85) MemStCy.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Currency
Dim b As Currency
a = 1.5@
End Sub(3,0x84) MemStCy, (3,0x85) MemStCy
Description: draft, by claude-opus-5-5. Handler 0x6610AEBF, dispatch slot 0x66106F54, modOpcodes line 1033.
MemStStr
(3,0x87)not emittedhandler #539Stringinferred_corpusEncoding, evidence and notes
Encoding: FD 87 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B2D0, unique to this slot (real opcode #539).
Description: none. Handler 0x6610B2D0, dispatch slot 0x66107B30, modOpcodes line 1015.
MemStStrCopy
(3,0x91)emittedhandler #547Stringinferred_corpus102 corpus hits into [pr + offset]` (pr on the stack).Pops the value and an object pointer, writes value at pr+offset (operand %2).
Stack: [..., pr:Pr, v:] -> [...]
Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).
Emitted when writing a -typed field through an object pointer.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
End Sub
Private Sub P()
Static r As TRec
r.s = "x"
End Sub
Encoding, evidence and notes
Encoding: FD 91 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD91 0400 MemStStrCopy [pr + 0x4]
Form1.mnuSecureDownload_Click @ 0x456570 | 4566D4 FD91 8C00 MemStStrCopy [pr + 0x8C]
Form1.Form_Load @ 0x479DC0 | 47B372 FD91 9000 MemStStrCopy [pr + 0x90]
clsCmnDlg.OpenDialog @ 0x457B6C | 457BA3 FD91 4000 MemStStrCopy [pr + 0x40]
102 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_91_MemStStrCopy.
Handler: 0x6610635E, unique to this slot (real opcode #547).
Corpus: 102 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610635E, dispatch slot 0x66107B58, modOpcodes line 1025.
MemStUI1
(3,0x80)emittedhandler #537Integerinferred_corpus1 corpus hits[pr + offset] (pr on the stack).Pops the value and an object pointer, writes value at pr+offset (operand %2).
Stack: [..., pr:Pr, v:UI1] -> [...]
Mirror of MemLd* family. Copy variants take a copy semantically appropriate to the type (BSTR SysAllocString, Variant VariantCopy).
Emitted when writing a UI1-typed field through an object pointer.
Public Sub Main()
Static a As Byte
Dim b As Byte
a = 7
End Sub
Encoding, evidence and notes
Encoding: FD 80 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD80 0000 MemStUI1 [pr + 0x0]
lzma.Proc_46E084 @ 0x46E084 | 46E253 FD80 0000 MemStUI1 [pr + 0x0]
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_80_MemStUI1.
Handler: 0x6610AEA6, unique to this slot (real opcode #537).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610AEA6, dispatch slot 0x66107B14, modOpcodes line 1008.
MemStVar
(3,0x86)emittedhandler #538Variantinferred_corpuspr.Pops a Variant (16 bytes); the source Variant is moved and the old destination value is cleared, and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:Var] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Variant. The storage class selects the prefix (Mem); the value class selects the suffix (Var).
Public Sub Main()
Static a As Variant
Dim b As Variant
a = 5
End Sub
Encoding, evidence and notes
Encoding: FD 86 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD86 0000 MemStVar [pr + 0x0]
FD86 0000 MemStVar [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_86_MemStVar.
Handler: 0x6610B747, unique to this slot (real opcode #538).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Static a As Variant
Dim b As Variant
a = 5
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B747, dispatch slot 0x66107B2C, modOpcodes line 1014.
MemStVarAd
(3,0x8B)emittedhandler #541Variantinferred_corpuspr.Pops an object pointer stored into a Variant as VT_DISPATCH (Set v = obj), AddRef'd, and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:Var] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a object into a Variant. The storage class selects the prefix (Mem); the value class selects the suffix (VarAd).
Public Sub Main()
Dim o As Object
Static so As Object, su As IUnknown, sv As Variant
Set sv = F()
End Sub
Function F() As Object
End Function
Encoding, evidence and notes
Encoding: FD 8B (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD8B 0800 MemStVarAd [pr + 0x8]
FD8B 0800 MemStVarAd [pr + 0x8]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_8B_MemStVarAd.
Handler: 0x6610B48C, unique to this slot (real opcode #541).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim o As Object
Static so As Object, su As IUnknown, sv As Variant
Set sv = F()
End Sub
Function F() As Object
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B48C, dispatch slot 0x66107B40, modOpcodes line 1019.
MemStVarAdFunc
(3,0x8C)not emittedhandler #542Variantinferred_corpusEncoding, evidence and notes
Encoding: FD 8C (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B477, unique to this slot (real opcode #542).
Description: none. Handler 0x6610B477, dispatch slot 0x66107B44, modOpcodes line 1020.
MemStVarCopy
(3,0x90)emittedhandler #546Variantinferred_corpuspr.Pops a Variant, deep-copied with VariantCopy semantics; the old destination value is cleared, and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:Var] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a Variant (copied). The storage class selects the prefix (Mem); the value class selects the suffix (VarCopy).
Public Sub Main()
End Sub
Static Sub Work()
Dim a As Variant, b As Variant
a = b
b = a
End Sub
Encoding, evidence and notes
Encoding: FD 90 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD90 0000 MemStVarCopy [pr + 0x0]
FD90 0000 MemStVarCopy [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_90_MemStVarCopy.
Handler: 0x6610B6E6, unique to this slot (real opcode #546).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
End Sub
Static Sub Work()
Dim a As Variant, b As Variant
a = b
b = a
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B6E6, dispatch slot 0x66107B54, modOpcodes line 1024.
MemStVarUnk
(3,0x8D)emittedhandler #543Variantinferred_corpuspr.Pops an IUnknown pointer stored into a Variant as VT_UNKNOWN (Set v = unk), AddRef'd, and writes it to a field at an offset from the cached object pointer pr.
Stack: [..., v:Var] -> [...]
Operands: %2: byte offset from pr ([ebp-4Ch], set by a preceding FLdPr/FLdPrThis/AryLdPr/LdPrVar/NewIfNull*).
Class/form member variables (pr = Me), procedure Static variables (pr = the static block), and elements of multi-dimensional arrays (pr = element address from AryLdPr).
Emitted for assignments to a field at an offset from the cached object pointer pr when the value is a IUnknown into a Variant. The storage class selects the prefix (Mem); the value class selects the suffix (VarUnk).
Public Sub Main()
Dim u As IUnknown
Static sv As Variant
Set sv = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End Function
Encoding, evidence and notes
Encoding: FD 8D (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FD8D 0000 MemStVarUnk [pr + 0x0]
FD8D 0000 MemStVarUnk [pr + 0x0]
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_8D_MemStVarUnk.
Handler: 0x6610B528, unique to this slot (real opcode #543).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim u As IUnknown
Static sv As Variant
Set sv = u
End Sub
Function FU() As IUnknown
End Function
Function FO() As Object
End Function
Function FC() As Collection
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B528, dispatch slot 0x66107B48, modOpcodes line 1021.
MemStVarUnkFunc
(3,0x8E)not emittedhandler #544Variantinferred_corpusEncoding, evidence and notes
Encoding: FD 8E (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: [pr + %2]
Operands:
%2(pr +): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B50F, unique to this slot (real opcode #544).
Description: none. Handler 0x6610B50F, dispatch slot 0x66107B4C, modOpcodes line 1022.
Memory
CopyBytes / CopyBytesZero
CopyBytes
(0,0x38)emittedprimary of 2handler #55UDT / recordinferred_corpusPops source and destination addresses and copies sz bytes (memcpy).
Stack: [..., src:Rf, dst:Rf] -> [...]
Operand %2: byte count (observed 0x14 for a 20-byte UDT, 0x8 for an 8-byte one).
Emitted for assignment between UDTs that contain no reference-counted members, and to copy small UDT function results.
Private Type TB
x(15) As Byte
y As Long
End Type
Public Sub Main()
Dim a As TB, b As TB
a = b
End Sub
Encoding, evidence and notes
Encoding: 38, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: sz:%2
Operands:
%2(sz): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 38 1400 CopyBytes sz:0x14
38 1400 CopyBytes sz:0x14
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_38_CopyBytes.
Handler: 0x661099E7, shared by 2 dispatch slots (real opcode #55). This is the primary slot. Other slots: (3,CA) CopyBytes.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TB
x(15) As Byte
y As Long
End Type
Public Sub Main()
Dim a As TB, b As TB
a = b
End SubDescription: draft, by claude-opus-5-5. Handler 0x661099E7, dispatch slot 0x66106DF4, modOpcodes line 439.
CopyBytes
(3,0xCA)not emitteddup of (0,38)handler #55UDT / recordconfirmed_handlerEncoding, evidence and notes
Encoding: FD CA (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: sz:%2
Operands:
%2(sz): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661099E7, shared by 2 dispatch slots (real opcode #55). This is a duplicate slot of (0,38) CopyBytes. Other slots: (0,38) CopyBytes.
Description: none. Handler 0x661099E7, dispatch slot 0x66107C3C, modOpcodes line 440.
CopyBytesZero
(5,0x37)not emittedhandler #764UDT / recordinferred_corpusEncoding, evidence and notes
Encoding: FF 37 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109A0D, unique to this slot (real opcode #764).
Description: none. Handler 0x66109A0D, dispatch slot 0x661081F0, modOpcodes line 441.
New
New / NewIfNull (object instantiation)
New
(3,0xF4)emittedhandler #586Object / COMinferred_corpus20 corpus hitsNew Class).Creates an instance of the class identified by %t (CoCreateInstance for external classes, the VB class factory for private classes) and pushes the new reference.
Stack: [...] -> [..., o:Ad]
Emitted for an explicit New expression: Set x = New Class, New Class passed as an argument, With New Class. The %t operand identifies the class. As New variables use the NewIfNull* forms on first use instead.
Public Sub Main()
Dim v As Variant
Set v = New Collection
End Sub
Encoding, evidence and notes
Encoding: FD F4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:
%t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Observed: FDF4 0000 New Collection
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E43D FDF4 2700 New {0047D11C-4256-3641-2E44-4C4C00000000}
Form1.mnuNewHexEditorWin_Click @ 0x45AC2C | 45AC52 FDF4 2700 New {0047D11C-4256-3641-2E44-4C4C00000000}
Form1.mnuHexEditor_Click @ 0x462D24 | 462E07 FDF4 2700 New {0047D11C-4256-3641-2E44-4C4C00000000}
20 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F4_New.
Handler: 0x661060D3, unique to this slot (real opcode #586).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 20 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As Collection
Set c = New CollectionDescription: draft, by claude-opus-5-5. Handler 0x661060D3, dispatch slot 0x66107CE4, modOpcodes line 249.
NewIfNullAd
(0,0x56)emittedprimary of 2handler #84Object / COMinferred_corpus27 corpus hitsAs New auto-instancing: create the object if Nothing, then push the reference.If the slot holding the As New variable is Nothing, instantiates class %t. Then pushes the object reference.
Stack: [...] -> [..., o:Ad]
Emitted when an As New variable is used as a value rather than a call receiver: For Each x In c, With c, Set y = c.
Public Sub Main()
Dim c As New Collection, x As Variant
For Each x In c
Next
out:
End Sub
Encoding, evidence and notes
Encoding: 56, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %t
Operands:
%t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Observed: 56 0000 NewIfNullAd Collection
Form1.Proc_458C58 @ 0x458C58 | 458D23 56 0000 NewIfNullAd clsCmnDlg
Form2.cmdRun_Click @ 0x469FCC | 46A14F 56 0000 NewIfNullAd CScriptFunctions
Form2.cmdRun_Click @ 0x469FCC | 46A17A 56 0000 NewIfNullAd CScriptFunctions
27 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_56_NewIfNullAd.
Handler: 0x66106101, shared by 2 dispatch slots (real opcode #84). This is the primary slot. Other slots: (3,F6) NewIfNullAd.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 27 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As New Collection, d As Collection
Set d = cDescription: draft, by claude-opus-5-5. Handler 0x66106101, dispatch slot 0x66106E6C, modOpcodes line 251.
NewIfNullAd
(3,0xF6)not emitteddup of (0,56)handler #84Object / COMconfirmed_handlerAs New auto-instancing: create the object if Nothing, then push the reference.Encoding, evidence and notes
Encoding: FD F6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:
%t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106101, shared by 2 dispatch slots (real opcode #84). This is a duplicate slot of (0,56) NewIfNullAd. Other slots: (0,56) NewIfNullAd.
Description: none. Handler 0x66106101, dispatch slot 0x66107CEC, modOpcodes line 252.
NewIfNullPr
(0,0x24)emittedprimary of 2handler #35Object / COMinferred_corpus371 corpus hitsAs New auto-instancing: create the object if the variable is Nothing, then load it into pr.If the slot holding the As New variable is Nothing, instantiates class %t and stores it there. Then loads the reference into the cached object register pr.
Emitted at every use of an As New variable as a method/property receiver (c.Count with Dim c As New Collection). This is where the deferred creation happens.
Public Sub Main()
Dim a(3) As New Collection, n As Long
n = a(1).Count
End Sub
Encoding, evidence and notes
Encoding: 24, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %t
Operands:
%t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Observed: 24 0000 NewIfNullPr Collection
Form1.LoadPlugins @ 0x4644FC | 46450E 24 0200 NewIfNullPr VBGlobal
Form1.LoadPlugins @ 0x4644FC | 46459E 24 0200 NewIfNullPr VBGlobal
Form1.LoadPlugins @ 0x4644FC | 4646F6 24 0200 NewIfNullPr VBGlobal
371 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_24_NewIfNullPr.
Handler: 0x661060F3, shared by 2 dispatch slots (real opcode #35). This is the primary slot. Other slots: (3,F7) NewIfNullPr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 371 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As New Collection, n As Long
n = c.CountDescription: draft, by claude-opus-5-5. Handler 0x661060F3, dispatch slot 0x66106DA4, modOpcodes line 253.
NewIfNullPr
(3,0xF7)not emitteddup of (0,24)handler #35Object / COMconfirmed_handlerAs New auto-instancing: create the object if the variable is Nothing, then load it into pr.Encoding, evidence and notes
Encoding: FD F7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:
%t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661060F3, shared by 2 dispatch slots (real opcode #35). This is a duplicate slot of (0,24) NewIfNullPr. Other slots: (0,24) NewIfNullPr.
Description: none. Handler 0x661060F3, dispatch slot 0x66107CF0, modOpcodes line 254.
NewIfNullRf
(3,0xF5)emittedhandler #587Object / COMinferred_corpus4 corpus hitsAs New auto-instancing: create the object if Nothing, then push the variable's address (ByRef).If the variable is Nothing, instantiates class %t into it. Then pushes the variable's address.
Stack: [...] -> [..., &o:Rf]
Emitted when an As New variable is passed ByRef to an object parameter (P c with Sub P(x As Collection)).
Dim gc As New Collection
Dim a(3) As New Collection
Public Sub Main()
P a(1)
End Sub
Sub P(x As Collection)
End Sub
Encoding, evidence and notes
Encoding: FD F5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %t
Operands:
%t: code_object_ref, 2 byte(s). 16-bit constant-pool index of a class/object descriptor (the type to instantiate or check).
Observed: FDF5 0000 NewIfNullRf Collection
Form1.mnuHideDups_Click @ 0x4629E4 | 462AF2 FDF5 D200 NewIfNullRf Collection
Form1.mnuHideDups_Click @ 0x4629E4 | 462B57 FDF5 D200 NewIfNullRf Collection
Form1.mnuHideDups_Click @ 0x4629E4 | 462B7B FDF5 D200 NewIfNullRf Collection
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_F5_NewIfNullRf.
Handler: 0x6610B050, unique to this slot (real opcode #587).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Sub P(x As Collection)
End Sub
Sub Main()
Dim c As New Collection
P c
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B050, dispatch slot 0x66107CE8, modOpcodes line 250.
Pop
Pop value from stack
PopAd
(2,0x8B)emittedhandler #429Stack & frameconfirmed_msdocs72 corpus hitsPops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Public Sub Main()
Dim o As Object
Debug.Print o.Count, o.Item("a")
End Sub
Encoding, evidence and notes
Encoding: FC 8B (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FC8B PopAd
Form1.Form_Resize @ 0x474F3C | 475000 FC8B PopAd
Form1.Form_Resize @ 0x474F3C | 475097 FC8B PopAd
Form1.Form_Resize @ 0x474F3C | 4750E7 FC8B PopAd
72 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_8B_PopAd.
Handler: 0x66106898, unique to this slot (real opcode #429).
Corpus: 72 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106898, dispatch slot 0x66107740, modOpcodes line 954.
PopAdLd4
(0,0x49)emittedprimary of 2handler #72Stack & frameconfirmed_msdocs57 corpus hitsPops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Public Sub Main()
Dim v As Variant, n As Long
n = UBound(v) + LBound(v)
End Sub
Encoding, evidence and notes
Encoding: 49, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 49 PopAdLd4
Form1.AryIsEmpty @ 0x43F208 | 43F210 49 PopAdLd4
fso.Proc_45ECB4 @ 0x45ECB4 | 45EE05 49 PopAdLd4
fso.Proc_448314 @ 0x448314 | 44834D 49 PopAdLd4
57 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_49_PopAdLd4.
Handler: 0x661068DF, shared by 2 dispatch slots (real opcode #72). This is the primary slot. Other slots: (2,5C) PopAdLd4.
Corpus: 57 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661068DF, dispatch slot 0x66106E38, modOpcodes line 959.
PopAdLd4
(2,0x5C)not emitteddup of (0,49)handler #72Stack & frameconfirmed_handlerAlias dispatch slot (2, 0x5C) for the canonical PopAdLd4 at (0, 0x49); semantics are identical.
Pops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Encoding, evidence and notes
Encoding: FC 5C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661068DF, shared by 2 dispatch slots (real opcode #72). This is a duplicate slot of (0,49) PopAdLd4. Other slots: (0,49) PopAdLd4.
Description: draft, by claude-opus-4.7. Handler 0x661068DF, dispatch slot 0x66107684, modOpcodes line 960.
PopAdLdVar
(0,0x25)emittedprimary of 2handler #36Stack & frameconfirmed_msdocs567 corpus hitsPops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Public Sub Main()
Dim o As Object
o.Prop = 5
End Sub
Encoding, evidence and notes
Encoding: 25, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 25 PopAdLdVar
Form1.LoadPlugins @ 0x4644FC | 464788 25 PopAdLdVar
Form1.cmdAbortProcessing_Click @ 0x441954 | 441995 25 PopAdLdVar
Form1.lvSearch_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) @ 0x43F1A8 | 43F1B4 25 PopAdLdVar
567 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_25_PopAdLdVar.
Handler: 0x661068EE, shared by 2 dispatch slots (real opcode #36). This is the primary slot. Other slots: (2,8C) PopAdLdVar.
Corpus: 567 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661068EE, dispatch slot 0x66106DA8, modOpcodes line 961.
PopAdLdVar
(2,0x8C)not emitteddup of (0,25)handler #36Stack & frameconfirmed_handlerAlias dispatch slot (2, 0x8C) for the canonical PopAdLdVar at (0, 0x25); semantics are identical.
Pops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Encoding, evidence and notes
Encoding: FC 8C (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661068EE, shared by 2 dispatch slots (real opcode #36). This is a duplicate slot of (0,25) PopAdLdVar. Other slots: (0,25) PopAdLdVar.
Description: draft, by claude-opus-4.7. Handler 0x661068EE, dispatch slot 0x66107744, modOpcodes line 962.
PopFPR4
(0,0x37)emittedprimary of 2handler #54Stack & frameconfirmed_msdocs50 corpus hitsPops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Public Sub Main()
Form1.CurrentX = 1
End Sub
' ---- Form1.frm
Encoding, evidence and notes
Encoding: 37, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 37 PopFPR4
Form1.Form_Resize @ 0x474F3C | 474FAB 37 PopFPR4
Form1.Form_Resize @ 0x474F3C | 474FD2 37 PopFPR4
Form1.Form_Resize @ 0x474F3C | 475022 37 PopFPR4
50 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_37_PopFPR4.
Handler: 0x661068A7, shared by 2 dispatch slots (real opcode #54). This is the primary slot. Other slots: (2,89) PopFPR4.
Corpus: 50 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661068A7, dispatch slot 0x66106DF0, modOpcodes line 955.
PopFPR4
(2,0x89)not emitteddup of (0,37)handler #54Stack & frameconfirmed_handlerAlias dispatch slot (2, 0x89) for the canonical PopFPR4 at (0, 0x37); semantics are identical.
Pops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Encoding, evidence and notes
Encoding: FC 89 (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661068A7, shared by 2 dispatch slots (real opcode #54). This is a duplicate slot of (0,37) PopFPR4. Other slots: (0,37) PopFPR4.
Description: draft, by claude-opus-4.7. Handler 0x661068A7, dispatch slot 0x66107738, modOpcodes line 956.
PopFPR8
(0,0x39)emittedprimary of 2handler #56Stack & frameconfirmed_msdocs1 corpus hitsPops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Public Sub Main()
Dim v As Variant, s As String
v = DateAdd("d", 1, Now)
End Sub
Encoding, evidence and notes
Encoding: 39, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 39 PopFPR8
Form2.mnuMain_Event_0 @ 0x45F55C | 45F76E 39 PopFPR8
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_39_PopFPR8.
Handler: 0x661068C3, shared by 2 dispatch slots (real opcode #56). This is the primary slot. Other slots: (2,8A) PopFPR8.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x661068C3, dispatch slot 0x66106DF8, modOpcodes line 957.
PopFPR8
(2,0x8A)not emitteddup of (0,39)handler #56Stack & frameconfirmed_handlerAlias dispatch slot (2, 0x8A) for the canonical PopFPR8 at (0, 0x39); semantics are identical.
Pops and discards. Used after expression-statements whose result is unused.
Stack: [..., a:T] -> [...]
Emitted for statement-level expressions whose value is not assigned.
Encoding, evidence and notes
Encoding: FC 8A (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661068C3, shared by 2 dispatch slots (real opcode #56). This is a duplicate slot of (0,39) PopFPR8. Other slots: (0,39) PopFPR8.
Description: draft, by claude-opus-4.7. Handler 0x661068C3, dispatch slot 0x6610773C, modOpcodes line 958.
PopTmpLd
Pop, store to temp, reload as address
PopTmpLdAd1
(3,0xC2)emittedhandler #566Stack & frameinferred_corpus6 corpus hitsPopTmpLdAd1).Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.
Emitted in expression code where an intermediate result must persist briefly past its allocation.
Public Sub Main()
PB 5
End Sub
Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding: FD C2 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDC2 7AFF PopTmpLdAd1 var_86
modEscapes.Proc_464894 @ 0x464894 | 4649F4 FDC2 7AFE PopTmpLdAd1 var_186
modEscapes.Proc_464894 @ 0x464894 | 464A02 FDC2 78FE PopTmpLdAd1 var_188
modEscapes.Proc_459E1C @ 0x459E1C | 459ED0 FDC2 D6FE PopTmpLdAd1 var_12A
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C2_PopTmpLdAd1.
Handler: 0x6610BFC9, unique to this slot (real opcode #566).
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610BFC9, dispatch slot 0x66107C1C, modOpcodes line 964.
PopTmpLdAd2
(0,0x2B)emittedprimary of 2handler #42Stack & frameinferred_corpus152 corpus hitsPopTmpLdAd2).Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.
Emitted in expression code where an intermediate result must persist briefly past its allocation.
Public Sub Main()
PI 5
End Sub
Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding: 2B, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 2B 7AFF PopTmpLdAd2 var_86
Form1.mnuDecompressZWS_Click @ 0x447F34 | 447F99 2B 52FF PopTmpLdAd2 var_AE
Form1.mnuErrorSaveRawAll_Click @ 0x45D950 | 45DA1F 2B C6FE PopTmpLdAd2 var_13A
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CA48 2B DEFE PopTmpLdAd2 var_122
152 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2B_PopTmpLdAd2.
Handler: 0x66106906, shared by 2 dispatch slots (real opcode #42). This is the primary slot. Other slots: (3,C3) PopTmpLdAd2.
Corpus: 152 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106906, dispatch slot 0x66106DC0, modOpcodes line 965.
PopTmpLdAd2
(3,0xC3)not emitteddup of (0,2B)handler #42Stack & frameconfirmed_handlerPopTmpLdAd2).Encoding, evidence and notes
Encoding: FD C3 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106906, shared by 2 dispatch slots (real opcode #42). This is a duplicate slot of (0,2B) PopTmpLdAd2. Other slots: (0,2B) PopTmpLdAd2.
Description: none. Handler 0x66106906, dispatch slot 0x66107C20, modOpcodes line 966.
PopTmpLdAd8
(0,0x30)emittedprimary of 2handler #47Stack & frameinferred_corpusStores the 8-byte value on top of the stack into the temporary %a and pushes its address, so an expression can be passed ByRef.
Stack: [..., v:R8] -> [..., &tmp:Rf]
Emitted for passing a Currency expression or literal to a ByRef Currency parameter (PC 1.5 with Sub PC(x As Currency)).
Public Sub Main()
PC 1.5
End Sub
Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding: 30, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 30 74FF PopTmpLdAd8 var_8C
30 74FF PopTmpLdAd8 var_8C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_30_PopTmpLdAd8.
Handler: 0x6610BFE1, shared by 2 dispatch slots (real opcode #47). This is the primary slot. Other slots: (3,C5) PopTmpLdAd8.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
PC 1.5
End Sub
Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610BFE1, dispatch slot 0x66106DD4, modOpcodes line 968.
PopTmpLdAd8
(3,0xC5)not emitteddup of (0,30)handler #47Stack & frameconfirmed_handlerEncoding, evidence and notes
Encoding: FD C5 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BFE1, shared by 2 dispatch slots (real opcode #47). This is a duplicate slot of (0,30) PopTmpLdAd8. Other slots: (0,30) PopTmpLdAd8.
Description: none. Handler 0x6610BFE1, dispatch slot 0x66107C28, modOpcodes line 969.
PopTmpLdAdFPR4
(3,0xC8)emittedhandler #568Stack & frameinferred_corpusStores ST0 as a 4-byte single into the temporary %a and pushes the address.
Emitted for passing a Single expression or literal to a ByRef Single parameter.
Public Sub Main()
PS 1.5
End Sub
Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End Sub
Encoding, evidence and notes
Encoding: FD C8 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDC8 78FF PopTmpLdAdFPR4 var_88
FDC8 78FF PopTmpLdAdFPR4 var_88
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C8_PopTmpLdAdFPR4.
Handler: 0x6610C01B, unique to this slot (real opcode #568).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
PS 1.5
End Sub
Sub PB(x As Byte)
End Sub
Sub PI(x As Integer)
End Sub
Sub PL(x As Long)
End Sub
Sub PS(x As Single)
End Sub
Sub PD(x As Double)
End Sub
Sub PC(x As Currency)
End Sub
Sub PV(x As Variant)
End Sub
Sub PT(x As String)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C01B, dispatch slot 0x66107C34, modOpcodes line 973.
PopTmpLdAdFPR8
(3,0xC9)emittedhandler #569Stack & frameinferred_corpusStores ST0 as an 8-byte double into the temporary %a and pushes the address.
Observed for Put #1, 2, 1.5, where the record number is passed by reference.
Public Sub Main()
Put #1, 2, 1.5
End Sub
Encoding, evidence and notes
Encoding: FD C9 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDC9 74FF PopTmpLdAdFPR8 var_8C
FDC9 74FF PopTmpLdAdFPR8 var_8C
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C9_PopTmpLdAdFPR8.
Handler: 0x6610C03C, unique to this slot (real opcode #569).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Put #1, 2, 1.5
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C03C, dispatch slot 0x66107C38, modOpcodes line 974.
PopTmpLdAdStr
(0,0x59)emittedprimary of 3handler #87Stack & frameconfirmed_handler190 corpus hitsPopTmpLdAdStr).Alias dispatch slot (0, 0x59) for the canonical PopTmpLdAdStr at (3, 0xC4); semantics are identical.
Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.
Emitted in expression code where an intermediate result must persist briefly past its allocation.
Public Sub Main()
Dim a(5) As Boolean
Erase a
End Sub
Encoding, evidence and notes
Encoding: 59, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: 59 5CFF PopTmpLdAdStr var_A4
Form1.LoadPlugins @ 0x4644FC | 4645C8 59 A4FE PopTmpLdAdStr var_15C
Form1.mnub64decode_Click @ 0x451280 | 451288 59 64FF PopTmpLdAdStr var_9C
Form1.mnub64decode_Click @ 0x451280 | 4512A6 59 70FF PopTmpLdAdStr var_90
190 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_59_PopTmpLdAdStr.
Handler: 0x6610691F, shared by 3 dispatch slots (real opcode #87). This is the primary slot. Other slots: (3,C4) PopTmpLdAdStr, (3,C7) PopTmpLdAdStr.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,59):
Dim a(5) As Boolean : Erase a - (3,C7):
Dim f As String * 8 : P f
Corpus: 190 occurrence(s) in PDFStreamDumper_p.exe.
(3,0xC4) PopTmpLdAdStr, (3,0xC7) PopTmpLdAdStr
Description: draft, by claude-opus-4.7. Handler 0x6610691F, dispatch slot 0x66106E78, modOpcodes line 971.
PopTmpLdAdStr
(3,0xC4)not emitteddup of (0,59)handler #87Stack & frameinferred_corpusPopTmpLdAdStr).Encoding, evidence and notes
Encoding: FD C4 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610691F, shared by 3 dispatch slots (real opcode #87). This is a duplicate slot of (0,59) PopTmpLdAdStr. Other slots: (0,59) PopTmpLdAdStr, (3,C7) PopTmpLdAdStr.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,59):
Dim a(5) As Boolean : Erase a - (3,C7):
Dim f As String * 8 : P f
(0,0x59) PopTmpLdAdStr, (3,0xC7) PopTmpLdAdStr
Description: none. Handler 0x6610691F, dispatch slot 0x66107C24, modOpcodes line 967.
PopTmpLdAdStr
(3,0xC7)emitteddup of (0,59)handler #87Stack & frameconfirmed_handler91 corpus hitsPopTmpLdAdStr).Alias dispatch slot (3, 0xC7) for the canonical PopTmpLdAdStr at (3, 0xC4); semantics are identical.
Combined pop+load pattern used by the compiler for expression-temporary lifetime management. Pops a temporary slot reference (often a freshly-allocated string or address), then reloads its current value onto the stack. The PopTmpLdAdStr/PopTmpLdAd* variants encode the storage class of the temp.
Emitted in expression code where an intermediate result must persist briefly past its allocation.
Public Sub Main()
Dim f As String * 8
P f
End Sub
Sub P(s As String)
End Sub
Encoding, evidence and notes
Encoding: FD C7 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FDC7 68FF PopTmpLdAdStr var_98
Form1.mnuErrorSaveRaw_Click @ 0x45C9BC | 45CAE1 FDC7 C0FE PopTmpLdAdStr var_140
Form1.Proc_448AF0 @ 0x448AF0 | 448B55 FDC7 44FF PopTmpLdAdStr var_BC
Form1.mnuDecrypt_Click @ 0x449D84 | 449DA8 FDC7 6CFF PopTmpLdAdStr var_94
91 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\3_C7_PopTmpLdAdStr.
Handler: 0x6610691F, shared by 3 dispatch slots (real opcode #87). This is a duplicate slot of (0,59) PopTmpLdAdStr. Other slots: (0,59) PopTmpLdAdStr, (3,C4) PopTmpLdAdStr.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,59):
Dim a(5) As Boolean : Erase a - (3,C7):
Dim f As String * 8 : P f
Corpus: 91 occurrence(s) in PDFStreamDumper_p.exe.
(0,0x59) PopTmpLdAdStr, (3,0xC4) PopTmpLdAdStr
Description: draft, by claude-opus-4.7. Handler 0x6610691F, dispatch slot 0x66107C30, modOpcodes line 972.
PopTmpLdAdVar
(3,0xC6)not emittedhandler #567Stack & frameinferred_corpusEncoding, evidence and notes
Encoding: FD C6 (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BFFB, unique to this slot (real opcode #567).
Description: none. Handler 0x6610BFFB, dispatch slot 0x66107C2C, modOpcodes line 970.
Print # / Debug.Print formatting
PrintChan
(3,0x32)not emittedhandler #490File I/O & Printconfirmed_msdocsOne step of an item-by-item Print encoding: selects the output channel (file number). The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 32 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109A5B, unique to this slot (real opcode #490).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x66109A5B, dispatch slot 0x661079DC, modOpcodes line 525.
PrintComma
(3,0x34)not emittedhandler #492File I/O & Printconfirmed_msdocs,)); never emitted by VB6 SP6.One step of an item-by-item Print encoding: advances to the next print zone (,). The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 34 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B894, unique to this slot (real opcode #492).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B894, dispatch slot 0x661079E4, modOpcodes line 526.
PrintEos
(3,0x35)not emittedhandler #493File I/O & Printconfirmed_msdocsOne step of an item-by-item Print encoding: ends the statement (flushes, no newline). The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 35 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B861, unique to this slot (real opcode #493).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B861, dispatch slot 0x661079E8, modOpcodes line 527.
PrintFile
(5,0x0E)emittedhandler #740File I/O & Printinferred_corpus1 corpus hitsImplements Print #N, ... / Debug.Print element emission for the suffix-indicated type. Pops the file number and the value; formats and writes per VB6 Print rules.
Emitted per argument of a Print / Debug.Print statement, dispatched by the static type of each argument.
Public Sub Main()
Dim n As Long, s As String
Print #1, "x";
End Sub
Encoding, evidence and notes
Encoding: FF 0E (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF0E 01000C00 PrintFile
fso.Proc_440D44 @ 0x440D44 | 440D78 FF0E 54000C00 PrintFile
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0E_PrintFile.
Handler: 0x6610662A, unique to this slot (real opcode #740).
Finding: Probe: an entire Print #n, ... statement (items, ;, ,, Spc, Tab) compiles to one PrintFile with a descriptor. The legacy per-item Print* opcodes (3,32..3,3C) are never emitted.
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Print #1, valueDescription: draft, by claude-opus-4.7. Handler 0x6610662A, dispatch slot 0x6610814C, modOpcodes line 524.
PrintItemComma
(3,0x37)not emittedhandler #495File I/O & Printconfirmed_msdocs,); never emitted by VB6 SP6.One step of an item-by-item Print encoding: prints one item followed by ,. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 37 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B82E, unique to this slot (real opcode #495).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B82E, dispatch slot 0x661079F0, modOpcodes line 529.
PrintItemNL
(3,0x39)not emittedhandler #497File I/O & Printconfirmed_msdocsOne step of an item-by-item Print encoding: prints one item followed by a newline. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 39 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B83F, unique to this slot (real opcode #497).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B83F, dispatch slot 0x661079F8, modOpcodes line 531.
PrintItemSemi
(3,0x38)not emittedhandler #496File I/O & Printconfirmed_msdocs;); never emitted by VB6 SP6.One step of an item-by-item Print encoding: prints one item followed by ;. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 38 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B850, unique to this slot (real opcode #496).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B850, dispatch slot 0x661079F4, modOpcodes line 530.
PrintNL
(3,0x36)not emittedhandler #494File I/O & Printconfirmed_msdocsOne step of an item-by-item Print encoding: writes a newline. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 36 (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B8B1, unique to this slot (real opcode #494).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B8B1, dispatch slot 0x661079EC, modOpcodes line 528.
PrintObj
(3,0x3A)not emittedhandler #498File I/O & Printinferred_corpusEncoding, evidence and notes
Encoding: FD 3A (lead byte FD selects table 3), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B8B9, unique to this slot (real opcode #498).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: none. Handler 0x6610B8B9, dispatch slot 0x661079FC, modOpcodes line 522.
PrintObject
(5,0x0D)emittedhandler #739File I/O & Printinferred_corpus1 corpus hitsPrint method on an object (form, picture box, Printer): one descriptor-driven call for the whole item list.Pops the target object and the items, and prints them through the object's Print support according to a descriptor that encodes each item's type and separator (;, ,, Spc, Tab).
Emitted for object.Print ... and unqualified Print inside a form: Printer.Print "x", Me.Print a; b, Picture1.Print. Debug.Print is removed at compile time and Print #n uses PrintFile (5,0E).
Public Sub Main()
Dim o As Object
o.Print "x"
End Sub
Encoding, evidence and notes
Encoding: FF 0D (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF0D 01000C00 PrintObject
Form1.mnuLoadAsImage_Click @ 0x45B0F4 | 45B2D0 FF0D 86000C00 PrintObject
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_0D_PrintObject.
Handler: 0x66106606, unique to this slot (real opcode #739).
Finding: Probe: form/object Print (e.g. Me.Print, Print inside a form, Printer.Print) compiles to a single PrintObject with a descriptor.
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Printer.Print "hello"Description: draft, by claude-opus-5-5. Handler 0x66106606, dispatch slot 0x66108148, modOpcodes line 523.
PrintSpc
(3,0x3B)not emittedhandler #499File I/O & Printconfirmed_msdocsSpc(n) spaces); never emitted by VB6 SP6.One step of an item-by-item Print encoding: writes Spc(n) spaces. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 3B (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B872, unique to this slot (real opcode #499).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B872, dispatch slot 0x66107A00, modOpcodes line 532.
PrintTab
(3,0x3C)not emittedhandler #500File I/O & Printconfirmed_msdocsTab(n) column); never emitted by VB6 SP6.One step of an item-by-item Print encoding: moves to Tab(n) column. The runtime still dispatches the slot, but VB6 SP6 compiles each whole Print statement into a single descriptor-driven PrintFile (5,0E) or PrintObject (5,0D) instead.
Not emitted by VB6 SP6: no Print #, form Print or Printer.Print variant tested produced it (see Phase 4). Expect it only in p-code from other compiler versions or hand-crafted p-code.
Encoding, evidence and notes
Encoding: FD 3C (lead byte FD selects table 3), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B883, unique to this slot (real opcode #500).
Family note: Phase 4: VB6 SP6 compiles every Print/Print # statement to a single PrintFile (5,0E) or PrintObject (5,0D). The per-item Print opcodes in this family were never emitted. They appear to be a legacy encoding still supported by the runtime.
Description: draft, by claude-opus-5-5. Handler 0x6610B883, dispatch slot 0x66107A04, modOpcodes line 533.
Record
UDT/record copy/destruct
AssignRecord
(4,0xF5)emittedhandler #717UDT / recordinferred_corpusPops destination and source addresses and copies the record field by field, using the UDT descriptor udtPool:%2 to AddRef/copy reference members and release the destination's old values.
Stack: [..., src:Rf, dst:Rf] -> [...] (observed push order: source, then destination)
Emitted for q = r when the UDT contains reference-counted members. Plain-data UDTs use CopyBytes instead.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TRec, q As TRec
q = r
End Sub
Encoding, evidence and notes
Encoding: FE F5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPool:%2
Operands:
%2(udtPool): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FEF5 0000 AssignRecord udtPool:0x0
FEF5 0000 AssignRecord udtPool:0x0
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F5_AssignRecord.
Handler: 0x6610C0C5, unique to this slot (real opcode #717).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r As TRec, q As TRec
q = r
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C0C5, dispatch slot 0x661080E8, modOpcodes line 629.
DestructRecord
(5,0x2A)emittedhandler #753UDT / recordinferred_corpusPops a UDT address and frees its String/Variant/Object members according to the descriptor udtPool:%2.
Observed before Get #n, rec, r overwrites a UDT that contains Strings.
Private Type TR
a As Long
s As String * 4
End Type
Public Sub Main()
Dim r As TR
Get #1, 2, r
End Sub
Encoding, evidence and notes
Encoding: FF 2A (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPool:%2
Operands:
%2(udtPool): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF2A 0000 DestructRecord udtPool:0x0
FF2A 0000 DestructRecord udtPool:0x0
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2A_DestructRecord.
Handler: 0x6610C05D, unique to this slot (real opcode #753).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TR
a As Long
s As String * 4
End Type
Public Sub Main()
Dim r As TR
Get #1, 2, r
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C05D, dispatch slot 0x661081BC, modOpcodes line 630.
EraseDestruct
(4,0x60)emittedhandler #619UDT / recordinferred_corpusErase a fixed-size array of UDTs: destruct every element's reference members.Pops the array descriptor and releases the String/Variant/Object members of every element (descriptor udtPool:%2). The fixed array itself keeps its storage.
Emitted for Erase r where r is a fixed-size array of a UDT with reference members.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r(3) As TRec
Erase r
End Sub
Encoding, evidence and notes
Encoding: FE 60 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: udtPool:%2
Operands:
%2(udtPool): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FE60 0000 EraseDestruct udtPool:0x0
FE60 0000 EraseDestruct udtPool:0x0
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_60_EraseDestruct.
Handler: 0x66109147, unique to this slot (real opcode #619).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Private Type TRec
a As Long
s As String
v As Variant
o As Object
End Type
Private Type TPlain
a As Long
b As Integer
End Type
Public Sub Main()
Dim r(3) As TRec
Erase r
End SubDescription: draft, by claude-opus-5-5. Handler 0x66109147, dispatch slot 0x66107E94, modOpcodes line 628.
Special
NOP / invalid / undefined
InvalidExcode
(0,0x03)structuraldup of (0,01)handler #2StructuralundefinedEncoding, evidence and notes
Encoding: 03, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x6610C423, shared by 2 dispatch slots (real opcode #2). This is a duplicate slot of (0,01) vbDecNop. Other slots: (0,01) vbDecNop.
Description: none. Handler 0x6610C423, dispatch slot 0x66106D20, modOpcodes line 169.
vbDecNop
(0,0x01)structuralprimary of 2handler #2StructuralundefinedEncoding, evidence and notes
Encoding: 01, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x6610C423, shared by 2 dispatch slots (real opcode #2). This is the primary slot. Other slots: (0,03) InvalidExcode.
Description: none. Handler 0x6610C423, dispatch slot 0x66106D18, modOpcodes line 168.
String_Concat
String concatenation
ConcatStr
(0,0x2A)emittedprimary of 2handler #41Stringconfirmed_msdocs797 corpus hitsPops b and a, pushes a & b.
Stack: [..., a:Str, b:Str] -> [..., (a & b):Str]
ConcatStr operates on BSTRs directly; ConcatVar coerces Variants to strings before joining (VB6 conversion rules apply; Null operand produces Null).
Emitted for the & operator. String operands -> ConcatStr; any Variant -> ConcatVar.
Public Sub Main()
Dim a As String, b As String, c As String
c = a + b
End Sub
Encoding, evidence and notes
Encoding: 2A, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 2A ConcatStr
Form1.LoadPlugins @ 0x4644FC | 464524 2A ConcatStr
Form1.LoadPlugins @ 0x4644FC | 4645BF 2A ConcatStr
Form1.LoadPlugins @ 0x4644FC | 464667 2A ConcatStr
797 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_2A_ConcatStr.
Handler: 0x66106B99, shared by 2 dispatch slots (real opcode #41). This is the primary slot. Other slots: (1,F0) ConcatStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 797 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As String, b As String, c As String
c = a & bDescription: draft, by claude-opus-4.7. Handler 0x66106B99, dispatch slot 0x66106DBC, modOpcodes line 374.
ConcatStr
(1,0xF0)not emitteddup of (0,2A)handler #41Stringconfirmed_handlerAlias dispatch slot (1, 0xF0) for the canonical ConcatStr at (0, 0x2A); semantics are identical.
Pops b and a, pushes a & b.
Stack: [..., a:Str, b:Str] -> [..., (a & b):Str]
ConcatStr operates on BSTRs directly; ConcatVar coerces Variants to strings before joining (VB6 conversion rules apply; Null operand produces Null).
Emitted for the & operator. String operands -> ConcatStr; any Variant -> ConcatVar.
Dim a As String, b As String, c As String
c = a & b
Encoding, evidence and notes
Encoding: FB F0 (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106B99, shared by 2 dispatch slots (real opcode #41). This is a duplicate slot of (0,2A) ConcatStr. Other slots: (0,2A) ConcatStr.
Check of vb6_source_eq example: compiles, but emits a different slot of the same handler. emits (0,2A) ConcatStr (same handler, different slot)
Description: draft, by claude-opus-4.7. Handler 0x66106B99, dispatch slot 0x661074D4, modOpcodes line 375.
ConcatVar
(1,0xEF)emittedhandler #346Stringinferred_corpus429 corpus hits&) where at least one operand is a Variant; result Variant in a temporary.Pops b and a, pushes a & b.
Stack: [..., a:Var, b:Var] -> [..., (a & b):Var]
ConcatStr operates on BSTRs directly; ConcatVar coerces Variants to strings before joining (VB6 conversion rules apply; Null operand produces Null).
Emitted for & when either operand is a Variant (String & String uses ConcatStr (0,2A)). Null & x yields x (Null is treated as empty).
Public Sub Main()
Dim a As Variant, b As Variant, c As Variant
c = a & b
End Sub
Encoding, evidence and notes
Encoding: FB EF (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBEF 3CFF ConcatVar var_C4
Form1.mnub64decode_Click @ 0x451280 | 45135E FBEF 0CFF ConcatVar var_F4
Form1.mnub64decode_Click @ 0x451280 | 451367 FBEF ECFE ConcatVar var_114
Form1.mnub64decode_Click @ 0x451280 | 451370 FBEF CCFE ConcatVar var_134
429 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_EF_ConcatVar.
Handler: 0x66106BAB, unique to this slot (real opcode #346).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 429 occurrence(s) in PDFStreamDumper_p.exe.
Dim a As Variant, b As Variant, c As Variant
a = "x": b = 1
c = a & bDescription: draft, by claude-opus-5-5. Handler 0x66106BAB, dispatch slot 0x661074D0, modOpcodes line 376.
String_FixedLen
Fixed-length string ops
LdFixedStr
(0,0x33)emittedprimary of 2handler #50Stringinferred_corpus2 corpus hitsReads sz characters from the fixed buffer whose address is on the stack and pushes a new BSTR of that length (trailing pad spaces kept).
Stack: [..., &fx:Rf] -> [..., s:Str]
Emitted wherever a fixed-length String (As String * n) is read as a String value: assignment to a String, passing to a String parameter or API, comparison, Select Case. The operand gives the fixed length in characters.
Dim gf As String * 8
Public Sub Main()
Dim s As String
s = gf
End Sub
Encoding, evidence and notes
Encoding: 33, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: sz:%2
Operands:
%2(sz): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 33 0800 LdFixedStr sz:0x8
CDisassembler.DisasmBytes @ 0x4585E4 | 45866A 33 0001 LdFixedStr sz:0x100
CDisassembler.DisasmBytes @ 0x4585E4 | 458673 33 0001 LdFixedStr sz:0x100
2 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_33_LdFixedStr.
Handler: 0x6610B253, shared by 2 dispatch slots (real opcode #50). This is the primary slot. Other slots: (4,61) LdFixedStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2 occurrence(s) in PDFStreamDumper_p.exe.
Dim f As String * 8, s As String
f = "abc"
s = fDescription: draft, by claude-opus-5-5. Handler 0x6610B253, dispatch slot 0x66106DE0, modOpcodes line 989.
LdFixedStr
(4,0x61)not emitteddup of (0,33)handler #50Stringconfirmed_handlerEncoding, evidence and notes
Encoding: FE 61 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: sz:%2
Operands:
%2(sz): immediate_word, 2 byte(s). 16-bit immediate.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B253, shared by 2 dispatch slots (real opcode #50). This is a duplicate slot of (0,33) LdFixedStr. Other slots: (0,33) LdFixedStr.
Description: none. Handler 0x6610B253, dispatch slot 0x66107E98, modOpcodes line 990.
StFixedStr
(0,0x47)emittedprimary of 2handler #70Stringinferred_corpus6 corpus hitsStFixedStr).Operates on a fixed-length VB6 String (Dim s As String * N). Fixed-length strings are stored in-place as Unicode buffers (not BSTRs); assignment requires explicit load/store-fixed-str opcodes.
Emitted at reads/writes of fixed-length string variables.
Dim gf As String * 8
Public Sub Main()
Dim s As String
gf = "abc"
End Sub
Encoding, evidence and notes
Encoding: 47, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: sz:%2
Operands:
%2(sz): immediate_word, 2 byte(s). 16-bit immediate.
Observed: 47 0800 StFixedStr sz:0x8
fso.Proc_448BF0 @ 0x448BF0 | 448C53 47 0000 StFixedStr sz:0x0
fso.Proc_448BF0 @ 0x448BF0 | 448C7F 47 0000 StFixedStr sz:0x0
frmSclog.GetShortName @ 0x44ADCC | 44AE36 47 0000 StFixedStr sz:0x0
6 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_47_StFixedStr.
Handler: 0x6610B37B, shared by 2 dispatch slots (real opcode #70). This is the primary slot. Other slots: (4,0E) StLsetFixStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 6 occurrence(s) in PDFStreamDumper_p.exe.
Dim s As String * 16
s = "hello"Description: draft, by claude-opus-4.7. Handler 0x6610B37B, dispatch slot 0x66106E30, modOpcodes line 991.
StFixedStrFree
(4,0x0F)emittedhandler #600Stringinferred_corpusPops the destination address and the source BSTR, copies/pads/truncates into the fixed buffer (length = operand), then frees the source BSTR.
Operand (16-bit): fixed length in characters (observed 5).
Emitted for fx = <string expression> with fx As String * n.
Public Sub Main()
Dim fx As String * 5
fx = Fs() & "a"
End Sub
Function Fs() As String
End Function
Encoding, evidence and notes
Encoding: FE 0F (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE0F 0500 StFixedStrFree
FE0F 0500 StFixedStrFree
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_0F_StFixedStrFree.
Handler: 0x6610B363, unique to this slot (real opcode #600).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim fx As String * 5
fx = Fs() & "a"
End Sub
Function Fs() As String
End FunctionDescription: draft, by claude-opus-5-5. Handler 0x6610B363, dispatch slot 0x66107D50, modOpcodes line 986.
StFixedStrR
(4,0x1E)emittedhandler #606Stringinferred_corpusRSet into a fixed-length String.Right-aligns the source string in the fixed buffer, padding on the left with spaces. Operand: fixed length (observed 8).
Emitted for RSet f = s with f As String * n and a literal or variable source.
Public Sub Main()
Dim f As String * 8
RSet f = "cd"
End Sub
Encoding, evidence and notes
Encoding: FE 1E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE1E 0800 StFixedStrR
FE1E 0800 StFixedStrR
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_1E_StFixedStrR.
Handler: 0x6610B34B, unique to this slot (real opcode #606).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim f As String * 8
RSet f = "cd"
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B34B, dispatch slot 0x66107D8C, modOpcodes line 987.
StFixedStrRFree
(4,0x1F)emittedhandler #607Stringinferred_corpusRSet into a fixed-length String from a temporary, then free the temporary.As StFixedStrR, freeing the temporary source afterwards. Operand: fixed length.
Emitted for RSet f = v where the source must be converted (e.g. a Variant).
Public Sub Main()
Dim f As String * 4, v As Variant
RSet f = v
End Sub
Encoding, evidence and notes
Encoding: FE 1F (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE1F 0400 StFixedStrRFree
FE1F 0400 StFixedStrRFree
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_1F_StFixedStrRFree.
Handler: 0x6610B333, unique to this slot (real opcode #607).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim f As String * 4, v As Variant
RSet f = v
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B333, dispatch slot 0x66107D90, modOpcodes line 988.
StLsetFixStr
(4,0x0E)not emitteddup of (0,47)handler #70Stringinferred_corpusStFixedStr).Encoding, evidence and notes
Encoding: FE 0E (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B37B, shared by 2 dispatch slots (real opcode #70). This is a duplicate slot of (0,47) StFixedStr. Other slots: (0,47) StFixedStr.
Description: none. Handler 0x6610B37B, dispatch slot 0x66107D4C, modOpcodes line 985.
String_Fn
String built-in (Len, InStr, Mid, StrComp)
FnInStr4
(4,0xFD)emittedhandler #724Stringconfirmed_msdocs53 corpus hitsFnInStr4.Pops the operand(s) needed by FnInStr4 and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnInStr4.
Public Sub Main()
Dim s As String, r As Variant
r = InStr(2, s, "b", vbTextCompare)
End Sub
Encoding, evidence and notes
Encoding: FE FD (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEFD FnInStr4
Form1.mnuExtractURI_Click @ 0x45774C | 4577B5 FEFD FnInStr4
Form1.mnuExtractURI_Click @ 0x45774C | 4577E6 FEFD FnInStr4
Form1.mnuExtractURI_Click @ 0x45774C | 457809 FEFD FnInStr4
53 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FD_FnInStr4.
Handler: 0x66106BF3, unique to this slot (real opcode #724).
Corpus: 53 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106BF3, dispatch slot 0x66108108, modOpcodes line 379.
FnInStr4Var
(4,0xFE)emittedhandler #725Stringinferred_corpus110 corpus hitsFnInStr4Var.Pops the operand(s) needed by FnInStr4Var and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnInStr4Var.
Public Sub Main()
Dim s As Variant, r As Variant
r = InStr(2, s, "b", vbTextCompare)
End Sub
Encoding, evidence and notes
Encoding: FE FE (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FEFE 3CFF FnInStr4Var var_C4
Form1.mnuUnescape_Click @ 0x45DEC4 | 45DF9D FEFE 2CFF FnInStr4Var var_D4
Form1.mnuUnescape_Click @ 0x45DEC4 | 45DFEF FEFE 2CFF FnInStr4Var var_D4
Form1.mnuUnescape_Click @ 0x45DEC4 | 45E044 FEFE 2CFF FnInStr4Var var_D4
110 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FE_FnInStr4Var.
Handler: 0x6610C3DB, unique to this slot (real opcode #725).
Corpus: 110 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610C3DB, dispatch slot 0x6610810C, modOpcodes line 380.
FnInStrB4
(4,0xFB)emittedhandler #722Stringconfirmed_msdocsFnInStrB4.Pops the operand(s) needed by FnInStrB4 and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnInStrB4.
Public Sub Main()
Dim s As String, r As Variant
r = InStrB(s, "b")
End Sub
Encoding, evidence and notes
Encoding: FE FB (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEFB FnInStrB4
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FB_FnInStrB4.
Handler: 0x6610C3AE, unique to this slot (real opcode #722).
Description: draft, by claude-opus-4.7. Handler 0x6610C3AE, dispatch slot 0x66108100, modOpcodes line 378.
FnInStrB4Var
(4,0xFC)emittedhandler #723Stringinferred_corpusInStrB with Variant operands; push the Variant result.Pops the start position and the two Variant strings, performs a byte-wise search and writes the result Variant to a temporary.
Emitted for r = InStrB(s, "b") with s As Variant.
Public Sub Main()
Dim s As Variant, r As Variant
r = InStrB(s, "b")
End Sub
Encoding, evidence and notes
Encoding: FE FC (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FEFC 3CFF FnInStrB4Var
FEFC 3CFF FnInStrB4Var
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FC_FnInStrB4Var.
Handler: 0x6610C3C0, unique to this slot (real opcode #723).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim s As Variant, r As Variant
r = InStrB(s, "b")
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C3C0, dispatch slot 0x66108104, modOpcodes line 381.
FnLenBStr
(1,0xEE)emittedhandler #345Stringconfirmed_msdocs1 corpus hitsFnLenBStr.Pops the operand(s) needed by FnLenBStr and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnLenBStr.
Public Sub Main()
Dim a As String, c As Variant
c = LenB(a)
End Sub
Encoding, evidence and notes
Encoding: FB EE (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FBEE FnLenBStr
modZLIB.Proc_43E804 @ 0x43E804 | 43E809 FBEE FnLenBStr
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_EE_FnLenBStr.
Handler: 0x6610C321, unique to this slot (real opcode #345).
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610C321, dispatch slot 0x661074CC, modOpcodes line 364.
FnLenBVar
(1,0xED)emittedhandler #344Stringinferred_corpusLenB() of a Variant; push the Variant result.Pops a Variant and writes its length in bytes (or Null) to the temporary %a.
Emitted for LenB(v) with v As Variant.
Public Sub Main()
Dim a As Variant, c As Variant
c = LenB(a)
End Sub
Encoding, evidence and notes
Encoding: FB ED (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBED 4CFF FnLenBVar var_B4
FBED 4CFF FnLenBVar var_B4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_ED_FnLenBVar.
Handler: 0x6610C336, unique to this slot (real opcode #344).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, c As Variant
c = LenB(a)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C336, dispatch slot 0x661074C8, modOpcodes line 366.
FnLenStr
(0,0x4A)emittedprimary of 2handler #73Stringconfirmed_msdocs191 corpus hitsFnLenStr.Pops the operand(s) needed by FnLenStr and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnLenStr.
Public Sub Main()
Dim a As String, c As Variant
c = Len(a)
End Sub
Encoding, evidence and notes
Encoding: 4A, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: 4A FnLenStr
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E3B0 4A FnLenStr
Form1.mnuB64Clipboard_Click @ 0x44E37C | 44E401 4A FnLenStr
Form1.mnub64decode_Click @ 0x451280 | 4512C7 4A FnLenStr
191 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4A_FnLenStr.
Handler: 0x66106BC6, shared by 2 dispatch slots (real opcode #73). This is the primary slot. Other slots: (1,EC) FnLenStr.
Corpus: 191 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106BC6, dispatch slot 0x66106E3C, modOpcodes line 362.
FnLenStr
(1,0xEC)not emitteddup of (0,4A)handler #73Stringconfirmed_handlerFnLenStr.Alias dispatch slot (1, 0xEC) for the canonical FnLenStr at (0, 0x4A); semantics are identical.
Pops the operand(s) needed by FnLenStr and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnLenStr.
Encoding, evidence and notes
Encoding: FB EC (lead byte FB selects table 1), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106BC6, shared by 2 dispatch slots (real opcode #73). This is a duplicate slot of (0,4A) FnLenStr. Other slots: (0,4A) FnLenStr.
Description: draft, by claude-opus-4.7. Handler 0x66106BC6, dispatch slot 0x661074C4, modOpcodes line 363.
FnLenVar
(1,0xEB)emittedhandler #343Stringinferred_corpus111 corpus hitsFnLenVar.Pops the operand(s) needed by FnLenVar and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnLenVar.
Public Sub Main()
Dim a As Variant, c As Variant
c = Len(a)
End Sub
Encoding, evidence and notes
Encoding: FB EB (lead byte FB selects table 1), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FBEB 4CFF FnLenVar var_B4
Form1.mnuHelp_Event_0 @ 0x45A2C0 | 45A2FF FBEB 50FF FnLenVar var_B0
Form1.mnuGotoObject_Click @ 0x44D160 | 44D19D FBEB 44FF FnLenVar var_BC
Form1.mnuSearch_Click @ 0x46E648 | 46E75C FBEB 4CFF FnLenVar var_B4
111 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\1_EB_FnLenVar.
Handler: 0x66106BD8, unique to this slot (real opcode #343).
Corpus: 111 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x66106BD8, dispatch slot 0x661074C0, modOpcodes line 365.
FnStrComp3
(4,0xFF)emittedhandler #726Stringconfirmed_msdocsFnStrComp3.Pops the operand(s) needed by FnStrComp3 and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to FnStrComp3.
Public Sub Main()
Dim s As String, r As Variant
r = StrComp(s, "b")
End Sub
Encoding, evidence and notes
Encoding: FE FF (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEFF FnStrComp3
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_FF_FnStrComp3.
Handler: 0x6610C3F6, unique to this slot (real opcode #726).
Description: draft, by claude-opus-4.7. Handler 0x6610C3F6, dispatch slot 0x66108110, modOpcodes line 383.
FnStrComp3Var
(5,0x00)emittedhandler #727Stringinferred_corpusStrComp(a, b, compare) with Variant operands; push the Variant result.Pops the compare mode and the two Variant strings and writes -1/0/1 (or Null) to the temporary %a.
Emitted for StrComp(v, "y", 1) with a Variant argument.
Public Sub Main()
Dim a As Variant, n As Variant
n = StrComp(a, "y", 1)
End Sub
Encoding, evidence and notes
Encoding: FF 00 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %a
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).
Observed: FF00 3CFF FnStrComp3Var var_C4
FF00 3CFF FnStrComp3Var var_C4
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_00_FnStrComp3Var.
Handler: 0x6610C408, unique to this slot (real opcode #727).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, n As Variant
n = StrComp(a, "y", 1)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C408, dispatch slot 0x66108114, modOpcodes line 384.
MidBStr
(2,0xBC)not emitteddup of (0,4F)handler #78Stringinferred_corpusMid statement: replace characters inside a String variable.Encoding, evidence and notes
Encoding: FC BC (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610C2CF, shared by 2 dispatch slots (real opcode #78). This is a duplicate slot of (0,4F) MidStr. Other slots: (0,4F) MidStr.
Description: none. Handler 0x6610C2CF, dispatch slot 0x66107804, modOpcodes line 372.
MidBStrB
(2,0xBE)emittedhandler #454Stringinferred_corpusMidB statement: replace bytes inside a String variable.Pops the replacement, the start and the target String reference, and overwrites bytes in place. The operand is a string-pool index (the replacement literal in the probe).
Emitted for MidB(s, 1) = "w" / MidB$(s, i, n) = x.
Public Sub Main()
Dim s As String
MidB(s, 1) = "w"
End Sub
Encoding, evidence and notes
Encoding: FC BE (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: FCBE 0000 MidBStrB str_4011EC='w'
FCBE 0000 MidBStrB str_4011EC='w'
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BE_MidBStrB.
Handler: 0x6610C2E7, unique to this slot (real opcode #454).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim s As String
MidB(s, 1) = "w"
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C2E7, dispatch slot 0x6610780C, modOpcodes line 371.
MidBVar
(2,0xBD)emittedhandler #453Stringconfirmed_msdocsMidBVar.Pops the operand(s) needed by MidBVar and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to MidBVar.
Public Sub Main()
Dim s As Variant
MidB(s, 1) = "w"
End Sub
Encoding, evidence and notes
Encoding: FC BD (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCBD MidBVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BD_MidBVar.
Handler: 0x6610C310, unique to this slot (real opcode #453).
Description: draft, by claude-opus-4.7. Handler 0x6610C310, dispatch slot 0x66107808, modOpcodes line 370.
MidStr
(0,0x4F)emittedprimary of 2handler #78Stringinferred_corpusMid statement: replace characters inside a String variable.Pops the replacement, the length (or Missing), the start and the target String reference, and overwrites characters in place without reallocating.
Emitted for Mid$(s, i, n) = x / Mid(s, i) = x. MidBStr (2,BC) shares this handler but is not emitted.
Public Sub Main()
Dim v As Variant, s As String
Mid(s, 1, 1) = "x"
End Sub
Encoding, evidence and notes
Encoding: 4F, then 2 operand byte(s); total instruction length 3 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: 4F 0000 MidStr str_4011EC='x'
4F 0000 MidStr str_4011EC='x'
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_4F_MidStr.
Handler: 0x6610C2CF, shared by 2 dispatch slots (real opcode #78). This is the primary slot. Other slots: (2,BC) MidBStr.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, s As String
Mid(s, 1, 1) = "x"
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610C2CF, dispatch slot 0x66106E50, modOpcodes line 368.
MidVar
(2,0xBB)emittedhandler #452Stringconfirmed_msdocsMidVar.Pops the operand(s) needed by MidVar and pushes the result. See VB6 documentation for the exact built-in this implements (e.g. FnLenStr = Len(string), FnInStr4 = 4-argument InStr, FnCStrVar = CStr on Variant). Behavior matches the corresponding VB6 intrinsic.
Emitted at calls to the VB6 intrinsic corresponding to MidVar.
Public Sub Main()
Dim s As Variant
Mid(s, 1) = "y"
End Sub
Encoding, evidence and notes
Encoding: FC BB (lead byte FC selects table 2), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FCBB MidVar
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_BB_MidVar.
Handler: 0x6610C2FF, unique to this slot (real opcode #452).
Description: draft, by claude-opus-4.7. Handler 0x6610C2FF, dispatch slot 0x66107800, modOpcodes line 369.
ThisVCall
Virtual call on This (self) object Prefix: This = current object pointer
ThisVCallAd
(0,0x12)not emittedprimary of 5handler #17Object / COMinferred_corpusEncoding, evidence and notes
Encoding: 12, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is the primary slot. Other slots: (4,01) ThisVCallI2, (4,02) ThisVCallI2, (4,07) ThisVCallI2, (4,08) ThisVCallI2.
(4,0x01) ThisVCallI2, (4,0x02) ThisVCallI2, (4,0x07) ThisVCallI2, (4,0x08) ThisVCallI2
Description: none. Handler 0x6610BCF2, dispatch slot 0x66106D5C, modOpcodes line 281.
ThisVCallCbFrame
(4,0x0D)not emittedhandler #599Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 0D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BBC8, unique to this slot (real opcode #599).
Description: none. Handler 0x6610BBC8, dispatch slot 0x66107D48, modOpcodes line 296.
ThisVCallCy
(4,0x05)not emittedhandler #598Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 05 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BC07, unique to this slot (real opcode #598).
Description: none. Handler 0x6610BC07, dispatch slot 0x66107D28, modOpcodes line 290.
ThisVCallFPR8
(0,0x11)not emittedprimary of 5handler #16Object / COMinferred_corpusEncoding, evidence and notes
Encoding: 11, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is the primary slot. Other slots: (4,09) ThisVCallHidden, (4,0A) ThisVCallHidden, (4,0C) ThisVCallHidden, (5,2C) ThisVCallHidden.
(4,0x09) ThisVCallHidden, (4,0x0A) ThisVCallHidden, (4,0x0C) ThisVCallHidden, (5,0x2C) ThisVCallHidden
Description: none. Handler 0x6610BD7C, dispatch slot 0x66106D58, modOpcodes line 280.
ThisVCallHidden
(4,0x09)not emitteddup of (0,11)handler #16Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 09 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,0A) ThisVCallHidden, (4,0C) ThisVCallHidden, (5,2C) ThisVCallHidden.
(0,0x11) ThisVCallFPR8, (4,0x0A) ThisVCallHidden, (4,0x0C) ThisVCallHidden, (5,0x2C) ThisVCallHidden
Description: none. Handler 0x6610BD7C, dispatch slot 0x66107D38, modOpcodes line 292.
ThisVCallHidden
(4,0x0A)not emitteddup of (0,11)handler #16Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 0A (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,09) ThisVCallHidden, (4,0C) ThisVCallHidden, (5,2C) ThisVCallHidden.
(0,0x11) ThisVCallFPR8, (4,0x09) ThisVCallHidden, (4,0x0C) ThisVCallHidden, (5,0x2C) ThisVCallHidden
Description: none. Handler 0x6610BD7C, dispatch slot 0x66107D3C, modOpcodes line 293.
ThisVCallHidden
(4,0x0C)not emitteddup of (0,11)handler #16Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 0C (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,09) ThisVCallHidden, (4,0A) ThisVCallHidden, (5,2C) ThisVCallHidden.
(0,0x11) ThisVCallFPR8, (4,0x09) ThisVCallHidden, (4,0x0A) ThisVCallHidden, (5,0x2C) ThisVCallHidden
Description: none. Handler 0x6610BD7C, dispatch slot 0x66107D44, modOpcodes line 294.
ThisVCallHidden
(5,0x2C)not emitteddup of (0,11)handler #16Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FF 2C (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BD7C, shared by 5 dispatch slots (real opcode #16). This is a duplicate slot of (0,11) ThisVCallFPR8. Other slots: (0,11) ThisVCallFPR8, (4,09) ThisVCallHidden, (4,0A) ThisVCallHidden, (4,0C) ThisVCallHidden.
(0,0x11) ThisVCallFPR8, (4,0x09) ThisVCallHidden, (4,0x0A) ThisVCallHidden, (4,0x0C) ThisVCallHidden
Description: none. Handler 0x6610BD7C, dispatch slot 0x661081C4, modOpcodes line 295.
ThisVCallHresult
(0,0x10)emittedprimary of 2handler #15Object / COMinferred_corpus330 corpus hitsMe.; check the HRESULT.Calls the method at the given vtable offset on the current instance (the procedure's this argument), without loading a receiver from the stack. A failed HRESULT raises the corresponding error.
Emitted when code inside a class, form or control calls one of that module's own procedures unqualified (Helper, x = Fn()). An explicit Me.Helper compiles to FLdPr this + VCallHresult instead. Operands: vtable offset and constant-pool index.
Public Sub Main()
Dim o As New CR2
End Sub
' ---- CR2.cls
Private Type TR
a As Long
End Type
Private Function F() As TR
End Function
Public Sub Work()
Dim r As TR
r = F()
End Sub
Encoding, evidence and notes
Encoding: 10, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %2 %c
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Observed: 10 20000000 ThisVCallHresult CR2.Proc_401708
Form1.LoadPlugins @ 0x4644FC | 4645EA 10 60070B00 ThisVCallHresult Form1.AryIsEmpty
Form1.mnuDecompileFlash_Click @ 0x4613A8 | 4613F6 10 38070B00 ThisVCallHresult Form1.isAS3Sorcerer_Installed
Form1.mnuDecompileFlashTools_Click @ 0x45A770 | 45A77F 10 38070B00 ThisVCallHresult Form1.isAS3Sorcerer_Installed
330 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_10_ThisVCallHresult.
Handler: 0x661066CB, shared by 2 dispatch slots (real opcode #15). This is the primary slot. Other slots: (2,6A) ThisVCallHresult.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 330 occurrence(s) in PDFStreamDumper_p.exe.
Dim o As CThing
Set o = New CThing
o.Work
' ---- CThing.cls
Public Sub Helper()
End Sub
Public Sub Work()
Helper
End SubDescription: draft, by claude-opus-5-5. Handler 0x661066CB, dispatch slot 0x66106D54, modOpcodes line 278.
ThisVCallHresult
(2,0x6A)not emitteddup of (0,10)handler #15Object / COMconfirmed_handlerMe.; check the HRESULT.Encoding, evidence and notes
Encoding: FC 6A (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %2 %c
Operands:
%2: immediate_word, 2 byte(s). 16-bit immediate.%c: pool_proc_or_global, 2 byte(s). 16-bit constant-pool index; the pool slot holds an address (a global variable, a procedure, or an object-table entry).
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661066CB, shared by 2 dispatch slots (real opcode #15). This is a duplicate slot of (0,10) ThisVCallHresult. Other slots: (0,10) ThisVCallHresult.
Description: none. Handler 0x661066CB, dispatch slot 0x661076BC, modOpcodes line 279.
ThisVCallI2
(4,0x01)not emitteddup of (0,12)handler #17Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 01 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,02) ThisVCallI2, (4,07) ThisVCallI2, (4,08) ThisVCallI2.
(0,0x12) ThisVCallAd, (4,0x02) ThisVCallI2, (4,0x07) ThisVCallI2, (4,0x08) ThisVCallI2
Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D18, modOpcodes line 284.
ThisVCallI2
(4,0x02)not emitteddup of (0,12)handler #17Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 02 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,01) ThisVCallI2, (4,07) ThisVCallI2, (4,08) ThisVCallI2.
(0,0x12) ThisVCallAd, (4,0x01) ThisVCallI2, (4,0x07) ThisVCallI2, (4,0x08) ThisVCallI2
Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D1C, modOpcodes line 285.
ThisVCallI2
(4,0x07)not emitteddup of (0,12)handler #17Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 07 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,01) ThisVCallI2, (4,02) ThisVCallI2, (4,08) ThisVCallI2.
(0,0x12) ThisVCallAd, (4,0x01) ThisVCallI2, (4,0x02) ThisVCallI2, (4,0x08) ThisVCallI2
Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D30, modOpcodes line 286.
ThisVCallI2
(4,0x08)not emitteddup of (0,12)handler #17Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 08 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BCF2, shared by 5 dispatch slots (real opcode #17). This is a duplicate slot of (0,12) ThisVCallAd. Other slots: (0,12) ThisVCallAd, (4,01) ThisVCallI2, (4,02) ThisVCallI2, (4,07) ThisVCallI2.
(0,0x12) ThisVCallAd, (4,0x01) ThisVCallI2, (4,0x02) ThisVCallI2, (4,0x07) ThisVCallI2
Description: none. Handler 0x6610BCF2, dispatch slot 0x66107D34, modOpcodes line 287.
ThisVCallR4
(4,0x03)not emittedhandler #596Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 03 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BC4C, unique to this slot (real opcode #596).
Description: none. Handler 0x6610BC4C, dispatch slot 0x66107D20, modOpcodes line 288.
ThisVCallR8
(4,0x04)not emittedhandler #597Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 04 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BC9F, unique to this slot (real opcode #597).
Description: none. Handler 0x6610BC9F, dispatch slot 0x66107D24, modOpcodes line 289.
ThisVCallUI1
(4,0x00)not emittedhandler #595Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 00 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BD36, unique to this slot (real opcode #595).
Description: none. Handler 0x6610BD36, dispatch slot 0x66107D14, modOpcodes line 283.
Trampoline
Lead byte trampoline (FB..FF → alt tables)
Lead0
(0,0xFB)structuralhandler #248StructuraltrampolineEncoding, evidence and notes
Encoding: FB, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x66106C05, unique to this slot (real opcode #248).
Description: none. Handler 0x66106C05, dispatch slot 0x66107100, modOpcodes line 1578.
Lead1
(0,0xFC)structuralhandler #249StructuraltrampolineEncoding, evidence and notes
Encoding: FC, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x66106C11, unique to this slot (real opcode #249).
Description: none. Handler 0x66106C11, dispatch slot 0x66107104, modOpcodes line 1579.
Lead2
(0,0xFD)structuralhandler #250StructuraltrampolineEncoding, evidence and notes
Encoding: FD, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x66106C1D, unique to this slot (real opcode #250).
Description: none. Handler 0x66106C1D, dispatch slot 0x66107108, modOpcodes line 1580.
Lead3
(0,0xFE)structuralhandler #251StructuraltrampolineEncoding, evidence and notes
Encoding: FE, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x66106C29, unique to this slot (real opcode #251).
Description: none. Handler 0x66106C29, dispatch slot 0x6610710C, modOpcodes line 1581.
Lead4
(0,0xFF)structuralhandler #252StructuraltrampolineEncoding, evidence and notes
Encoding: FF, then 0 operand byte(s); total instruction length 1 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6: structural slot (dispatch trampoline or invalid opcode), not an instruction the compiler generates.
Handler: 0x66106C35, unique to this slot (real opcode #252).
Description: none. Handler 0x66106C35, dispatch slot 0x66107110, modOpcodes line 1582.
TypeCheck
TypeOf / VerifyObj
CheckType
(4,0x8D)emittedhandler #647Object / COMinferred_corpusTypeOf obj Is Class: test an object reference against an interface.Pops an object reference, calls QueryInterface for the IID from the constant pool (%z), releases any obtained pointer and pushes a Boolean result.
Stack: [..., o:Ad] -> [..., b:Bool]
Emitted for If TypeOf o Is Collection Then with o As Object/class.
Public Sub Main()
Dim a As Object, n As Long
If TypeOf a Is Collection Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FE 8D (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %z
Operands:
%z: guid_property_lookup, 2 byte(s). 16-bit constant-pool index of a GUID used for a type check.
Observed: FE8D 0000 CheckType Collection ;{A4C46780-499F-101B-BB78-00AA00383CBB}
FE8D 0000 CheckType Collection ;{A4C46780-499F-101B-BB78-00AA00383CBB}
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_8D_CheckType.
Handler: 0x6610617F, unique to this slot (real opcode #647).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Object, n As Long
If TypeOf a Is Collection Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610617F, dispatch slot 0x66107F48, modOpcodes line 443.
CheckTypeVar
(2,0x6F)emittedhandler #404Object / COMinferred_corpusTypeOf v Is Class where the operand is a Variant.Pops a Variant; if it holds an object, it performs the QueryInterface test for the IID given by the operand. Pushes a Boolean.
Emitted for TypeOf v Is Collection with v As Variant.
Public Sub Main()
Dim a As Variant, n As Long
If TypeOf a Is Collection Then n = 1
End Sub
Encoding, evidence and notes
Encoding: FC 6F (lead byte FC selects table 2), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FC6F 0000 CheckTypeVar
FC6F 0000 CheckTypeVar
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\2_6F_CheckTypeVar.
Handler: 0x6610B074, unique to this slot (real opcode #404).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim a As Variant, n As Long
If TypeOf a Is Collection Then n = 1
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610B074, dispatch slot 0x661076D0, modOpcodes line 444.
VerifyPVarObj
(4,0xFA)not emittedhandler #721Object / COMconfirmed_msdocsValidates a runtime type assertion. HardType enforces that a Variant has a specific subtype (emitted at the entry of statically-typed receivers); VerifyVarObj ensures a Variant currently holds an Object/IDispatch.
Emitted at receiver-type boundaries (assignment into a typed slot, ByVal narrowing).
Encoding, evidence and notes
Encoding: FE FA (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66109DF8, unique to this slot (real opcode #721).
Description: draft, by claude-opus-4.7. Handler 0x66109DF8, dispatch slot 0x661080FC, modOpcodes line 457.
VerifyVarObj
(4,0xF9)emittedhandler #720Object / COMconfirmed_msdocs13 corpus hitsValidates a runtime type assertion. HardType enforces that a Variant has a specific subtype (emitted at the entry of statically-typed receivers); VerifyVarObj ensures a Variant currently holds an Object/IDispatch.
Emitted at receiver-type boundaries (assignment into a typed slot, ByVal narrowing).
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As DOnly, c As Object
Set o.Obj = c
End Sub
Encoding, evidence and notes
Encoding: FE F9 (lead byte FE selects table 4), then 0 operand byte(s); total instruction length 2 byte(s).
Operands: none. All inputs come from the evaluation stack or the frame.
Observed: FEF9 VerifyVarObj
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 4741C0 FEF9 VerifyVarObj
Form1.mnuSearchFilter_Event_0 @ 0x473E0C | 474493 FEF9 VerifyVarObj
Form1.parser_NewStream @ 0x472690 | 472A16 FEF9 VerifyVarObj
13 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_F9_VerifyVarObj.
Handler: 0x6610570C, unique to this slot (real opcode #720).
Corpus: 13 occurrence(s) in PDFStreamDumper_p.exe.
Description: draft, by claude-opus-4.7. Handler 0x6610570C, dispatch slot 0x661080F8, modOpcodes line 456.
VCall
Virtual COM call via vtable offset Prefix: V = virtual; receiver from stack
VCallAd
(0,0x0F)emittedprimary of 5handler #14Object / COMcontextual1335 corpus hitsCalls a method through the vtable at the byte offset in the operand and pushes the value returned in EAX.
Operand (16-bit): vtable byte offset (vbdec shows var.ID_n).
Probe (typelib ITyped): non-HRESULT methods returning Integer, Long, Boolean or String all compile to this slot. It is also used for VB intrinsic-object calls that return pointers. The typed VCallI2/VCallStr slots, which share this handler, are never emitted.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As ITyped, b As Boolean, v As Variant
If o.GetBool(4) = b Then b = o.GetBool(5)
End Sub
Encoding, evidence and notes
Encoding: 0F, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 0F 2800 VCallAd var_88.ID_0
0F 2800 VCallAd var_88.ID_0
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0F_VCallAd.
Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is the primary slot. Other slots: (4,11) VCallStr, (4,12) VCallStr, (4,17) VCallStr, (4,18) VCallStr.
Finding: Probe (typelib ITyped): non-HRESULT vtable calls returning Integer, Long, Boolean or String all compile to this slot (return value taken from EAX). The typed VCallI2/VCallStr/... slots were never emitted.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1335 occurrence(s) in PDFStreamDumper_p.exe.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As ITyped, b As Boolean, v As Variant
If o.GetBool(4) = b Then b = o.GetBool(5)
End Sub(4,0x11) VCallStr, (4,0x12) VCallStr, (4,0x17) VCallStr, (4,0x18) VCallStr
Description: draft, by claude-opus-5-5. Handler 0x66106788, dispatch slot 0x66106D50, modOpcodes line 267.
VCallCbFrame
(4,0x1D)not emittedhandler #605Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 1D (lead byte FE selects table 4), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BE20, unique to this slot (real opcode #605).
Description: none. Handler 0x6610BE20, dispatch slot 0x66107D88, modOpcodes line 276.
VCallCy
(4,0x15)not emittedhandler #604Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 15 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BE28, unique to this slot (real opcode #604).
Description: none. Handler 0x6610BE28, dispatch slot 0x66107D68, modOpcodes line 275.
VCallFPR8
(0,0x0E)emittedprimary of 5handler #13Object / COMcontextual7 corpus hitsCalls a method through the vtable at the byte offset given by the operand (on the object pointer pushed before it).
Operand (16-bit): vtable byte offset.
Probe (typelib ITyped): emitted for non-HRESULT methods returning Single/Double, and for typed calls whose result is discarded. Also seen for ErrObject.Clear. The second slot (5,2B) is used for Currency returns.
Public Sub Main()
Dim e As ErrObject, n As Long
e.Clear
End Sub
Encoding, evidence and notes
Encoding: 0E, then 2 operand byte(s); total instruction length 3 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: 0E 4800 VCallFPR8
0E 4800 VCallFPR8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0E_VCallFPR8.
Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is the primary slot. Other slots: (4,19) VCallFPR8, (4,1A) VCallFPR8, (4,1C) VCallFPR8, (5,2B) VCallFPR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0E):
Dim e As ErrObject, n As Long : e.Clear - (5,2B):
Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
Finding: Probe (typelib ITyped): emitted for vtable calls returning Single or Double directly (non-HRESULT), and also for typed calls whose result is discarded (o.GetI2 3). Currency returns use the (5,2B) slot.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 7 occurrence(s) in PDFStreamDumper_p.exe.
Public Sub Main()
Dim e As ErrObject, n As Long
e.Clear
End Sub(4,0x19) VCallFPR8, (4,0x1A) VCallFPR8, (4,0x1C) VCallFPR8, (5,0x2B) VCallFPR8
Description: draft, by claude-opus-5-5. Handler 0x66106761, dispatch slot 0x66106D4C, modOpcodes line 262.
VCallFPR8
(4,0x19)not emitteddup of (0,0E)handler #13Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 19 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,1A) VCallFPR8, (4,1C) VCallFPR8, (5,2B) VCallFPR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0E):
Dim e As ErrObject, n As Long : e.Clear - (5,2B):
Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
(0,0x0E) VCallFPR8, (4,0x1A) VCallFPR8, (4,0x1C) VCallFPR8, (5,0x2B) VCallFPR8
Description: none. Handler 0x66106761, dispatch slot 0x66107D78, modOpcodes line 263.
VCallFPR8
(4,0x1A)not emitteddup of (0,0E)handler #13Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 1A (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,19) VCallFPR8, (4,1C) VCallFPR8, (5,2B) VCallFPR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0E):
Dim e As ErrObject, n As Long : e.Clear - (5,2B):
Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
(0,0x0E) VCallFPR8, (4,0x19) VCallFPR8, (4,0x1C) VCallFPR8, (5,0x2B) VCallFPR8
Description: none. Handler 0x66106761, dispatch slot 0x66107D7C, modOpcodes line 264.
VCallFPR8
(4,0x1C)not emitteddup of (0,0E)handler #13Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 1C (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,19) VCallFPR8, (4,1A) VCallFPR8, (5,2B) VCallFPR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0E):
Dim e As ErrObject, n As Long : e.Clear - (5,2B):
Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
(0,0x0E) VCallFPR8, (4,0x19) VCallFPR8, (4,0x1A) VCallFPR8, (5,0x2B) VCallFPR8
Description: none. Handler 0x66106761, dispatch slot 0x66107D84, modOpcodes line 265.
VCallFPR8
(5,0x2B)emitteddup of (0,0E)handler #13Object / COMconfirmed_handlerCalls a method through the vtable at the byte offset given by the operand (on the object pointer pushed before it).
Operand (16-bit): vtable byte offset.
Probe (typelib ITyped): emitted for non-HRESULT methods returning Single/Double, and for typed calls whose result is discarded. Also seen for ErrObject.Clear. The second slot (5,2B) is used for Currency returns.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As ITyped, b As Currency, v As Variant
If o.GetCy(4) = b Then b = o.GetCy(5)
End Sub
Encoding, evidence and notes
Encoding: FF 2B (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF2B 2000 VCallFPR8
FF2B 2000 VCallFPR8
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_2B_VCallFPR8.
Handler: 0x66106761, shared by 5 dispatch slots (real opcode #13). This is a duplicate slot of (0,0E) VCallFPR8. Other slots: (0,0E) VCallFPR8, (4,19) VCallFPR8, (4,1A) VCallFPR8, (4,1C) VCallFPR8.
Compile-time slot selection: the compiler picks different slots of this handler for different source types:
- (0,0E):
Dim e As ErrObject, n As Long : e.Clear - (5,2B):
Dim o As ITyped, b As Currency, v As Variant : If o.GetCy(4) = b Then b = o.GetCy(5)
Finding: Probe: emitted for a non-HRESULT vtable call returning Currency (ITyped.GetCy). Same handler as (0,0E).
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As ITyped, b As Currency, v As Variant
If o.GetCy(4) = b Then b = o.GetCy(5)
End Sub(0,0x0E) VCallFPR8, (4,0x19) VCallFPR8, (4,0x1A) VCallFPR8, (4,0x1C) VCallFPR8
Description: draft, by claude-opus-5-5. Handler 0x66106761, dispatch slot 0x661081C0, modOpcodes line 266.
VCallHresult
(0,0x0D)emittedprimary of 2handler #12Object / COMinferred_corpus2124 corpus hitsPerforms a virtual call through an object's vtable. The 5-byte operand %v is a packed pair: a 2-byte vtable offset (the slot relative to the object's vtable start) and a 2-byte const-pool index used for the interface IID. The runtime issues QueryInterface for that IID first if the cached this pointer isn't already the requested interface.
Stack: [..., this:Pr, arg1, ..., argN] -> [..., result]
The receiver and pushed arguments are passed via stdcall to the resolved function pointer. Return is an HRESULT; on failure (FAILED(hr)) the runtime maps the HRESULT to a VB6 error number and raises (entering the active On Error handler).
VCallHresult is the standard form for Sub-style calls, Let-style property puts, and Set-style property accesses on typed COM/class references. Siblings: VCallAd returns an address (property-get by-reference), VCallFPR8 returns a Double via the FPU, ThisVCallHresult is the same opcode but with the receiver supplied implicitly from FLdPrThis.
Emitted for method and property calls on variables typed as a specific class or interface (VB classes, Collection, typelib interfaces). The %v operand gives the vtable offset and the interface. Late-bound Object calls use LateMem*/LateId* instead.
Private Type TR
c As Collection
End Type
Dim gr As TR
Public Sub Main()
Dim n As Long
n = gr.c.Count
End Sub
Encoding, evidence and notes
Encoding: 0D, then 4 operand byte(s); total instruction length 5 byte(s).
vbdec template: %v
Operands:
%v: vtable_call, 4 byte(s). 16-bit vtable byte offset followed by a 16-bit constant-pool index of the interface (IID) the call goes through.
Observed: 0D 24000000 VCallHresult Collection.Count()
Form1.LoadPlugins @ 0x4644FC | 464511 0D 14000300 VCallHresult VBGlobal Get App
Form1.LoadPlugins @ 0x4644FC | 464519 0D 50000400 VCallHresult _App Get Path
Form1.LoadPlugins @ 0x4644FC | 464571 0D 28000800 VCallHresult ListItems.Add([ByRef Index As Variant], [ByRef Key As Variant], [ByRef Text As Variant], [ByRef Icon As Variant], [ByRef SmallIcon As Variant]) As IListItem
2124 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\0_0D_VCallHresult.
Handler: 0x661066FA, shared by 2 dispatch slots (real opcode #12). This is the primary slot. Other slots: (2,69) VCallHresult.
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 2124 occurrence(s) in PDFStreamDumper_p.exe.
Dim c As Collection, n As Long
Set c = New Collection
n = c.CountDescription: draft, by claude-opus-5-5. Handler 0x661066FA, dispatch slot 0x66106D48, modOpcodes line 259.
VCallHresult
(2,0x69)not emitteddup of (0,0D)handler #12Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FC 69 (lead byte FC selects table 2), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %v
Operands:
%v: vtable_call, 4 byte(s). 16-bit vtable byte offset followed by a 16-bit constant-pool index of the interface (IID) the call goes through.
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x661066FA, shared by 2 dispatch slots (real opcode #12). This is a duplicate slot of (0,0D) VCallHresult. Other slots: (0,0D) VCallHresult.
Description: none. Handler 0x661066FA, dispatch slot 0x661076B8, modOpcodes line 260.
VCallR4
(4,0x13)not emittedhandler #602Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 13 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BE30, unique to this slot (real opcode #602).
Description: none. Handler 0x6610BE30, dispatch slot 0x66107D60, modOpcodes line 273.
VCallR8
(4,0x14)not emittedhandler #603Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 14 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610BE38, unique to this slot (real opcode #603).
Description: none. Handler 0x6610BE38, dispatch slot 0x66107D64, modOpcodes line 274.
VCallStr
(4,0x11)not emitteddup of (0,0F)handler #14Object / COMinferred_corpusEncoding, evidence and notes
Encoding: FE 11 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,12) VCallStr, (4,17) VCallStr, (4,18) VCallStr.
(0,0x0F) VCallAd, (4,0x12) VCallStr, (4,0x17) VCallStr, (4,0x18) VCallStr
Description: none. Handler 0x66106788, dispatch slot 0x66107D58, modOpcodes line 269.
VCallStr
(4,0x12)not emitteddup of (0,0F)handler #14Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 12 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,11) VCallStr, (4,17) VCallStr, (4,18) VCallStr.
(0,0x0F) VCallAd, (4,0x11) VCallStr, (4,0x17) VCallStr, (4,0x18) VCallStr
Description: none. Handler 0x66106788, dispatch slot 0x66107D5C, modOpcodes line 270.
VCallStr
(4,0x17)not emitteddup of (0,0F)handler #14Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 17 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,11) VCallStr, (4,12) VCallStr, (4,18) VCallStr.
(0,0x0F) VCallAd, (4,0x11) VCallStr, (4,0x12) VCallStr, (4,0x18) VCallStr
Description: none. Handler 0x66106788, dispatch slot 0x66107D70, modOpcodes line 271.
VCallStr
(4,0x18)not emitteddup of (0,0F)handler #14Object / COMconfirmed_handlerEncoding, evidence and notes
Encoding: FE 18 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x66106788, shared by 5 dispatch slots (real opcode #14). This is a duplicate slot of (0,0F) VCallAd. Other slots: (0,0F) VCallAd, (4,11) VCallStr, (4,12) VCallStr, (4,17) VCallStr.
(0,0x0F) VCallAd, (4,0x11) VCallStr, (4,0x12) VCallStr, (4,0x17) VCallStr
Description: none. Handler 0x66106788, dispatch slot 0x66107D74, modOpcodes line 272.
VCallUI1
(4,0x10)emittedhandler #601Object / COMinferred_corpusCalls a method through the vtable at the byte offset in the operand and pushes the Byte returned in AL.
Operand (16-bit): vtable byte offset.
Probe: emitted for a non-HRESULT typelib method declared unsigned char (ITyped.GetUI1).
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As ITyped, b As Byte, v As Variant
If o.GetUI1(4) = b Then b = o.GetUI1(5)
End Sub
Encoding, evidence and notes
Encoding: FE 10 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FE10 0C00 VCallUI1
FE10 0C00 VCallUI1
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\4_10_VCallUI1.
Handler: 0x6610BE40, unique to this slot (real opcode #601).
Finding: Probe: the only typed-return VCall slot besides VCallAd/VCallFPR8 that the compiler emits. Used for a non-HRESULT vtable call returning Byte.
Check of vb6_source_eq example: verified: compiles and emits this slot.
' references probes\_tlb\probetlb.tlb
Public Sub Main()
Dim o As ITyped, b As Byte, v As Variant
If o.GetUI1(4) = b Then b = o.GetUI1(5)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610BE40, dispatch slot 0x66107D54, modOpcodes line 268.
VarLateMem
Late-bound member on variant receiver Prefix: Receiver is variant
VarLateMemCallLdRfVar
(5,0x3E)emittedhandler #770Object / COMinferred_corpus3 corpus hitsResolves the name, invokes the method with args:%2 arguments and pushes the address of the result temporary %a.
Emitted for P v.F(1), where a Variant receiver's method result with arguments is passed ByRef. Operands: result temporary, member name, argument count.
Public Sub Main()
Dim v As Variant
P v.Y(1)
End Sub
Sub P(x As Variant)
End Sub
Sub Q(ByRef x As Long)
End Sub
Encoding, evidence and notes
Encoding: FF 3E (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
vbdec template: %a %s args:%2
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).%2(args): immediate_word, 2 byte(s). 16-bit immediate.
Observed: FF3E 3CFF00000100 VarLateMemCallLdRfVar var_C4 str_40120C='Y' args:0x1
frmReplace.Form_Resize @ 0x449E94 | 449F19 FF3E 48FF1C000100 VarLateMemCallLdRfVar var_B8 str_4271F8='ColumnHeaders' args:0x1
frmReplace.Form_Resize @ 0x449E94 | 449F3E FF3E A8FE1C000100 VarLateMemCallLdRfVar var_158 str_4271F8='ColumnHeaders' args:0x1
frmInlineDecoderCalls.mnuCopyList_Click @ 0x449948 | 449978 FF3E 54FF3F000100 VarLateMemCallLdRfVar var_AC str_42E35C='SubItems' args:0x1
3 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3E_VarLateMemCallLdRfVar.
Handler: 0x6610A91B, unique to this slot (real opcode #770).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 3 occurrence(s) in PDFStreamDumper_p.exe.
Sub P(x As Variant)
End Sub
Sub Main()
Dim v As Variant
P v.Y(1)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A91B, dispatch slot 0x6610820C, modOpcodes line 354.
VarLateMemCallLdVar
(5,0x42)emittedhandler #772Object / COMinferred_corpusThe receiver is a Variant (VT_DISPATCH) rather than an Object variable. Resolves the name, invokes the method and stores the result in a temporary. Operands: temporary slot, member-name index, argument count.
Emitted for w = v.DoIt(1) with v As Variant.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
w = v.DoIt(1)
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 42 (lead byte FF selects table 5), then 6 operand byte(s); total instruction length 8 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF42 28FF00000100 VarLateMemCallLdVar
FF42 28FF00000100 VarLateMemCallLdVar
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_42_VarLateMemCallLdVar.
Handler: 0x6610A935, unique to this slot (real opcode #772).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
w = v.DoIt(1)
End Sub
Sub P(x As Variant)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A935, dispatch slot 0x6610821C, modOpcodes line 353.
VarLateMemCallSt
(5,0x44)emittedhandler #774Object / COMinferred_corpusAs LateMemCallSt, with a Variant receiver.
Emitted for v.Prop(1) = 2 with v As Variant.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
v.Prop(1) = 2
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 44 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF44 00000100 VarLateMemCallSt
FF44 00000100 VarLateMemCallSt
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_44_VarLateMemCallSt.
Handler: 0x6610A952, unique to this slot (real opcode #774).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
v.Prop(1) = 2
End Sub
Sub P(x As Variant)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A952, dispatch slot 0x66108224, modOpcodes line 352.
VarLateMemLdRfVar
(5,0x3D)emittedhandler #769Object / COMinferred_corpus1 corpus hitsAs VarLateMemLdVar, but pushes the address of the result temporary %a for ByRef use.
Emitted when the result of v.Prop is passed ByRef (to a Variant parameter) or used as the receiver of a further member access (v.A.B).
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
P v.Prop
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 3D (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: FF3D 48FF0000 VarLateMemLdRfVar var_B8 str_4011FC='Prop'
Form2.Form_Unload (Cancel As Integer) @ 0x460A60 | 460BB1 FF3D 50FFCB00 VarLateMemLdRfVar var_B0 str_42560C='Checked'
1 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_3D_VarLateMemLdRfVar.
Handler: 0x66105C35, unique to this slot (real opcode #769).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 1 occurrence(s) in PDFStreamDumper_p.exe.
Sub P(x As Variant)
End Sub
Sub Main()
Dim v As Variant
P v.Prop
End SubDescription: draft, by claude-opus-5-5. Handler 0x66105C35, dispatch slot 0x66108208, modOpcodes line 356.
VarLateMemLdVar
(5,0x41)emittedhandler #771Object / COMinferred_corpus8 corpus hitsResolves the member name (%s) with GetIDsOfNames on the Variant's IDispatch and calls Invoke(PROPERTYGET|METHOD); the result goes to temporary %a.
Emitted for x = v.Prop (or v.F(args) used as a value) where v is a Variant containing an object. An Object receiver uses LateMemLdVar.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
w = v.Prop
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 41 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
vbdec template: %a %s
Operands:
%a: local_var_ref, 2 byte(s). signed 16-bit offset from the procedure frame pointer (EBP). Negative = local/temporary (vbdecvar_XX, XX = -offset), positive = argument (arg_XX).%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: FF41 48FF0000 VarLateMemLdVar var_B8 str_4011F8='Prop'
Form2.mnuRenameFunc_Click @ 0x471130 | 47127C FF41 64FF6600 VarLateMemLdVar var_9C str_41F73C='Text'
CScriptFunctions.GetListviewData @ 0x44080C | 44082C FF41 3CFF0400 VarLateMemLdVar var_C4 str_426A24='tag'
frmReplace.Form_Resize @ 0x449E94 | 449EB2 FF41 48FF1800 VarLateMemLdVar var_B8 str_4271C8='left'
8 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_41_VarLateMemLdVar.
Handler: 0x66105C3C, unique to this slot (real opcode #771).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 8 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant, w As Variant
w = v.PropDescription: draft, by claude-opus-5-5. Handler 0x66105C3C, dispatch slot 0x66108218, modOpcodes line 355.
VarLateMemSt
(5,0x43)emittedhandler #773Object / COMinferred_corpus4 corpus hitsPops the value, resolves the member name (%s) and calls Invoke(DISPATCH_PROPERTYPUT) on the Variant's object.
Emitted for v.Prop = x where v is a Variant containing an object. An Object receiver uses LateMemSt.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
v.Prop = 1
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 43 (lead byte FF selects table 5), then 2 operand byte(s); total instruction length 4 byte(s).
vbdec template: %s
Operands:
%s: pool_string, 2 byte(s). 16-bit constant-pool index of a string literal (BSTR).
Observed: FF43 0000 VarLateMemSt str_4011F8='Prop'
Form2.Form_Load @ 0x46C454 | 46C676 FF43 CB00 VarLateMemSt str_42560C='Checked'
frmReplace.Form_Resize @ 0x449E94 | 449EC9 FF43 1900 VarLateMemSt str_4271D4='Width'
frmReplace.Form_Resize @ 0x449E94 | 449EFE FF43 1B00 VarLateMemSt str_4271E8='height'
4 occurrence(s) in PDFStreamDumper.
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_43_VarLateMemSt.
Handler: 0x66105C87, unique to this slot (real opcode #773).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Corpus: 4 occurrence(s) in PDFStreamDumper_p.exe.
Dim v As Variant
v.Prop = 1Description: draft, by claude-opus-5-5. Handler 0x66105C87, dispatch slot 0x66108220, modOpcodes line 358.
VarLateMemStAd
(5,0x45)emittedhandler #775Object / COMinferred_corpusAs LateMemStAd, with a Variant receiver.
Emitted for Set v.Prop = x with v As Variant.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
Set v.Prop = Nothing
End Sub
Sub P(x As Variant)
End Sub
Encoding, evidence and notes
Encoding: FF 45 (lead byte FF selects table 5), then 4 operand byte(s); total instruction length 6 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Observed: FF45 00000000 VarLateMemStAd
FF45 00000000 VarLateMemStAd
From the Phase 4 probe (VB6 SP6, P-code).
Emitted by VB6 SP6 (P-code): yes. Minimal probe: probes\op\5_45_VarLateMemStAd.
Handler: 0x6610A93C, unique to this slot (real opcode #775).
Check of vb6_source_eq example: verified: compiles and emits this slot.
Public Sub Main()
Dim v As Variant, w As Variant, n As Long
Set v.Prop = Nothing
End Sub
Sub P(x As Variant)
End SubDescription: draft, by claude-opus-5-5. Handler 0x6610A93C, dispatch slot 0x66108228, modOpcodes line 359.
WMem_Load
WMem loads: read at [W-base + offset]. Prefix: W + Mem + Ld (Phase 3a).
WMemLdCy
(4,0xD4)not emittedprimary of 2handler #695CurrencycontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Currency (64-bit scaled int) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Cy]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5f9 at 0x6610a5f9 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D4 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5F9, shared by 2 dispatch slots (real opcode #695). This is the primary slot. Other slots: (4,D5) WMemLdCy.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A5F9, dispatch slot 0x66108064, modOpcodes line 1287.
WMemLdCy
(4,0xD5)not emitteddup of (4,D4)handler #695Currencyconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Currency (64-bit scaled int) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Cy]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5f9 at 0x6610a5f9 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5F9, shared by 2 dispatch slots (real opcode #695). This is a duplicate slot of (4,D4) WMemLdCy. Other slots: (4,D4) WMemLdCy.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A5F9, dispatch slot 0x66108068, modOpcodes line 1288.
WMemLdFPR4
(4,0xD9)not emittedhandler #697Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Single via x87 FPU value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):FPR4]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a613 at 0x6610a613 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D9 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A613, unique to this slot (real opcode #697).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A613, dispatch slot 0x66108078, modOpcodes line 1292.
WMemLdFPR8
(4,0xDA)not emittedhandler #698Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Double via x87 FPU value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):FPR8]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a62a at 0x6610a62a in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE DA (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A62A, unique to this slot (real opcode #698).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A62A, dispatch slot 0x6610807C, modOpcodes line 1293.
WMemLdI2
(4,0xD1)not emittedhandler #693IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 16-bit signed integer (VB6 Integer) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):I2]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5c9 at 0x6610a5c9 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5C9, unique to this slot (real opcode #693).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A5C9, dispatch slot 0x66108058, modOpcodes line 1284.
WMemLdRfVar
(4,0xD6)not emittedprimary of 2handler #696Stack & framecontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant ByRef reference value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):RfVar]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a641 at 0x6610a641 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D6 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A641, shared by 2 dispatch slots (real opcode #696). This is the primary slot. Other slots: (4,DC) WMemLdRfVar.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A641, dispatch slot 0x6610806C, modOpcodes line 1289.
WMemLdRfVar
(4,0xDC)not emitteddup of (4,D6)handler #696Stack & frameconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant ByRef reference value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):RfVar]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a641 at 0x6610a641 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE DC (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A641, shared by 2 dispatch slots (real opcode #696). This is a duplicate slot of (4,D6) WMemLdRfVar. Other slots: (4,D6) WMemLdRfVar.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A641, dispatch slot 0x66108084, modOpcodes line 1294.
WMemLdStr
(4,0xD2)not emittedprimary of 4handler #694StringcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D2 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is the primary slot. Other slots: (4,D3) WMemLdStr, (4,D7) WMemLdStr, (4,D8) WMemLdStr.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(4,0xD3) WMemLdStr, (4,0xD7) WMemLdStr, (4,0xD8) WMemLdStr
Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x6610805C, modOpcodes line 1285.
WMemLdStr
(4,0xD3)not emitteddup of (4,D2)handler #694Stringconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D3 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is a duplicate slot of (4,D2) WMemLdStr. Other slots: (4,D2) WMemLdStr, (4,D7) WMemLdStr, (4,D8) WMemLdStr.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(4,0xD2) WMemLdStr, (4,0xD7) WMemLdStr, (4,0xD8) WMemLdStr
Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x66108060, modOpcodes line 1286.
WMemLdStr
(4,0xD7)not emitteddup of (4,D2)handler #694Stringconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D7 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is a duplicate slot of (4,D2) WMemLdStr. Other slots: (4,D2) WMemLdStr, (4,D3) WMemLdStr, (4,D8) WMemLdStr.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(4,0xD2) WMemLdStr, (4,0xD3) WMemLdStr, (4,0xD8) WMemLdStr
Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x66108070, modOpcodes line 1290.
WMemLdStr
(4,0xD8)not emitteddup of (4,D2)handler #694Stringconfirmed_handlerHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Str]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5e2 at 0x6610a5e2 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D8 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5E2, shared by 4 dispatch slots (real opcode #694). This is a duplicate slot of (4,D2) WMemLdStr. Other slots: (4,D2) WMemLdStr, (4,D3) WMemLdStr, (4,D7) WMemLdStr.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
(4,0xD2) WMemLdStr, (4,0xD3) WMemLdStr, (4,0xD7) WMemLdStr
Description: draft, by claude-opus-4.7. Handler 0x6610A5E2, dispatch slot 0x66108074, modOpcodes line 1291.
WMemLdUI1
(4,0xD0)not emittedhandler #692IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 8-bit unsigned (VB6 Byte) value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):UI1]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a5b0 at 0x6610a5b0 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE D0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A5B0, unique to this slot (real opcode #692).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A5B0, dispatch slot 0x66108054, modOpcodes line 1283.
WMemLdVar
(4,0xDD)not emittedhandler #699VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant value.
Stack: [...] -> [..., (*([ebp+10h] + offset)):Var]
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b1ca at 0x6610b1ca in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
push dword ptr [eax] ; push value at *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE DD (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B1CA, unique to this slot (real opcode #699).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B1CA, dispatch slot 0x66108088, modOpcodes line 1295.
WMem_Store
WMem stores: write at [W-base + offset]. Prefix: W + Mem + St (Phase 3a).
WMemStAd
(4,0xE8)not emittedhandler #706Object / COMcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a raw 32-bit address value.
Stack: [..., v:Ad] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b3c6 at 0x6610b3c6 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E8 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B3C6, unique to this slot (real opcode #706).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B3C6, dispatch slot 0x661080B4, modOpcodes line 1304.
WMemStAdFunc
(4,0xEF)not emittedhandler #713Object / COMcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.
Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b3b3 at 0x6610b3b3 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE EF (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B3B3, unique to this slot (real opcode #713).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B3B3, dispatch slot 0x661080D0, modOpcodes line 1311.
WMemStFPR4
(4,0xE9)not emittedhandler #707Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Single via x87 FPU value.
Stack: [..., v:FPR4] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a6b9 at 0x6610a6b9 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E9 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A6B9, unique to this slot (real opcode #707).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A6B9, dispatch slot 0x661080B8, modOpcodes line 1305.
WMemStFPR8
(4,0xEA)not emittedhandler #708Floating pointcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Double via x87 FPU value.
Stack: [..., v:FPR8] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a6da at 0x6610a6da in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE EA (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A6DA, unique to this slot (real opcode #708).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A6DA, dispatch slot 0x661080BC, modOpcodes line 1306.
WMemStI2
(4,0xE1)not emittedhandler #701IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 16-bit signed integer (VB6 Integer) value.
Stack: [..., v:I2] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a66f at 0x6610a66f in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A66F, unique to this slot (real opcode #701).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A66F, dispatch slot 0x66108098, modOpcodes line 1297.
WMemStR4
(4,0xE2)not emittedprimary of 2handler #702IntegercontextualPops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.
Stack: [..., v:R4] -> [...]
Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.
Handler label: label near 0x6610a688 at 0x6610a688 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E2 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A688, shared by 2 dispatch slots (real opcode #702). This is the primary slot. Other slots: (4,E3) WMemStR4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-5-5. Handler 0x6610A688, dispatch slot 0x6610809C, modOpcodes line 1298.
WMemStR4
(4,0xE3)not emitteddup of (4,E2)handler #702Integerconfirmed_handlerPops a 4-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R4 suffix means a raw 4-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.
Stack: [..., v:R4] -> [...]
Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.
Handler label: label near 0x6610a688 at 0x6610a688 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E3 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A688, shared by 2 dispatch slots (real opcode #702). This is a duplicate slot of (4,E2) WMemStR4. Other slots: (4,E2) WMemStR4.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-5-5. Handler 0x6610A688, dispatch slot 0x661080A0, modOpcodes line 1299.
WMemStR8
(4,0xE4)not emittedprimary of 2handler #703CurrencycontextualPops a 8-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R8 suffix means a raw 8-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.
Stack: [..., v:R8] -> [...]
Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.
Handler label: label near 0x6610a69f at 0x6610a69f in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E4 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A69F, shared by 2 dispatch slots (real opcode #703). This is the primary slot. Other slots: (4,E5) WMemStR8.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-5-5. Handler 0x6610A69F, dispatch slot 0x661080A4, modOpcodes line 1300.
WMemStR8
(4,0xE5)not emitteddup of (4,E4)handler #703Currencyconfirmed_handlerPops a 8-byte value and writes it to the address computed from the stable secondary pointer at [ebp+10h] plus the 16-bit offset operand. The R8 suffix means a raw 8-byte move (compare FStR4, used for Long); floating-point values have separate FPR forms.
Stack: [..., v:R8] -> [...]
Not emitted by VB6 SP6 in any tested project type (see the W/IW family note). The source construct that uses the [ebp+10h] base is unknown.
Handler label: label near 0x6610a69f at 0x6610a69f in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E5 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A69F, shared by 2 dispatch slots (real opcode #703). This is a duplicate slot of (4,E4) WMemStR8. Other slots: (4,E4) WMemStR8.
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-5-5. Handler 0x6610A69F, dispatch slot 0x661080A8, modOpcodes line 1301.
WMemStStr
(4,0xE7)not emittedhandler #705StringcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a BSTR pointer (VB6 String) value.
Stack: [..., v:Str] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b2a1 at 0x6610b2a1 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E7 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B2A1, unique to this slot (real opcode #705).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B2A1, dispatch slot 0x661080B0, modOpcodes line 1303.
WMemStStrCopy
(4,0xF1)not emittedhandler #715StringcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.
Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b2c1 at 0x6610b2c1 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE F1 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B2C1, unique to this slot (real opcode #715).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B2C1, dispatch slot 0x661080D8, modOpcodes line 1313.
WMemStUI1
(4,0xE0)not emittedhandler #700IntegercontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a 8-bit unsigned (VB6 Byte) value.
Stack: [..., v:UI1] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610a657 at 0x6610a657 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610A657, unique to this slot (real opcode #700).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610A657, dispatch slot 0x66108094, modOpcodes line 1296.
WMemStVar
(4,0xE6)not emittedhandler #704VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a Variant value.
Stack: [..., v:Var] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b70c at 0x6610b70c in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE E6 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B70C, unique to this slot (real opcode #704).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B70C, dispatch slot 0x661080AC, modOpcodes line 1302.
WMemStVarAd
(4,0xEB)not emittedhandler #709VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a raw 32-bit address value.
Stack: [..., v:Ad] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b473 at 0x6610b473 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE EB (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B473, unique to this slot (real opcode #709).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B473, dispatch slot 0x661080C0, modOpcodes line 1307.
WMemStVarAdFunc
(4,0xEC)not emittedhandler #710VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.
Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b460 at 0x6610b460 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE EC (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B460, unique to this slot (real opcode #710).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B460, dispatch slot 0x661080C4, modOpcodes line 1308.
WMemStVarCopy
(4,0xF0)not emittedhandler #714VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.
Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b6b8 at 0x6610b6b8 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE F0 (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B6B8, unique to this slot (real opcode #714).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B6B8, dispatch slot 0x661080D4, modOpcodes line 1312.
WMemStVarUnk
(4,0xED)not emittedhandler #711VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.
Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b629 at 0x6610b629 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE ED (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B629, unique to this slot (real opcode #711).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B629, dispatch slot 0x661080C8, modOpcodes line 1309.
WMemStVarUnkFunc
(4,0xEE)not emittedhandler #712VariantcontextualHandler analysis (idalib, MSVBVM60.dll build 6.00.8268). Reads a 2-byte signed offset from the instruction stream and adds it to the pointer held at the fixed frame slot [ebp+10h]. That slot is set once by the procedure's caller ([ebp+10h] is procedure-invocation argument 3) and is never written by any handler in the ENGINE segment -- it is stable for the lifetime of the procedure.
This is a WMem variant: it accesses [ebp+10h] + offset directly. The slot is treated as a value of suffix `` value.
Stack: [..., v:] -> [...] (*([ebp+10h] + offset) <- v)
**Distinction from the corresponding Mem* opcode (non-W counterpart):** the regular Mem* family uses the runtime cache at [ebp-4Ch], which is updated by every preceding FLdPr, FLdPrThis, NewIfNullAd, Ary1LdPr, or LdPrVar instruction. The W-family bypasses that cache and uses the stable [ebp+10h] pointer instead -- so the W-base does not require a preceding object-load opcode to be set.
Identity of [ebp+10h] is not yet pinned. Handler analysis establishes the mechanical behavior; the source-language construct that establishes this secondary object pointer (parent scope, procedure descriptor, outer-class pointer, etc.) is not yet verified. PDFStreamDumper's corpus has zero occurrences of this family, suggesting the construct is rare in typical VB6 code. A targeted probe in Phase 4 should resolve which language-level construct emits these opcodes.
Emitted when the compiler accesses a member through a STABLE, caller-supplied object pointer (the secondary slot at [ebp+10h]) rather than through the runtime object-load cache that Mem* uses. The specific source-language construct that establishes the W-base has not yet been pinned by handler analysis alone -- PDFStreamDumper's corpus has zero occurrences of the entire IWMem/WMem family, suggesting the construct is uncommon in typical VB6 code. Candidate emit triggers worth probing in Phase 4: nested-class member access, parent-scope references from inside an event handler, or compiler-synthesized accessors that have access to a known-stable secondary pointer.
Handler label: label near 0x6610b612 at 0x6610b612 in MSVBVM60.dll (build 6.00.8268).
Canonical 8-instruction body:
movsx eax, word ptr [esi] ; 2-byte signed offset
add eax, [ebp+10h] ; eax = W-base + offset
pop dword ptr [eax] ; pop value, write to *eax
xor eax, eax
mov al, [esi+2] ; next opcode byte
add esi, 3 ; advance pcode pointer
jmp [_tblByteDisp + eax*4] ; dispatch next
Variations across suffixes (FPR4/FPR8/Var/Cy/Str/Darg) replace the central push/pop dword [eax] with the appropriate width-specific helper (fld/fst for FPU types, __vbaCopyBytes/__vbaStrCopy for BSTRs, the 16-byte Variant copy routine for Var, etc.). The base-computation step (add eax, [ebp+10h]) is identical across all 50 distinct handlers analyzed in the IWMem/WMem set.
Encoding, evidence and notes
Encoding: FE EE (lead byte FE selects table 4), then 2 operand byte(s); total instruction length 4 byte(s).
No printf operands are declared, but the instruction still consumes operand bytes; see the size above and the observed bytes below. (Phase 3a: flag=0 does not mean 'no operands'.)
Emitted by VB6 SP6 (P-code): not observed in about 3,070 probe programs. The slot exists in the runtime's dispatch table, but no tested source construct makes the compiler emit it.
Handler: 0x6610B612, unique to this slot (real opcode #712).
Family note: Phase 4: never emitted by VB6 SP6. Contexts tried include class/form/module statics, member UDTs with With, WithEvents, Implements, ActiveX DLL/EXE globals (these compile to FMem*), UserControl, PropertyPage, ActiveX Document, Add-in, DHTML and DataReport projects. Handler base [ebp+10h] (dispatcher arg 3) has no known source construct. IIS WebClass projects are untested.
Description: draft, by claude-opus-4.7. Handler 0x6610B612, dispatch slot 0x661080CC, modOpcodes line 1310.