<br><br><div class="gmail_quote">On Sat, Apr 16, 2011 at 4:50 PM, Mariano Martinez Peck <span dir="ltr"><<a href="mailto:marianopeck@gmail.com">marianopeck@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>Hi Eliot. For learning purposes, I would LOVE to be able to do something like: <br><br><br>(StackInterpreter >> #lookupMethodInClass:) simulatedMachineCode<br></blockquote><div><br></div><div>Its easy to add a primitive to get the code. What's problematic is decorating that code. Decorating it involves knowing the names for the variables whose addresses appear in the machine code, and that's tedious to write. The best way I know of getting the code right now is to use the VMMaker and Bochs plugin and the interface that allows one to supply a method in the current image to the simulator and have it translate it as if it were in the image being simulated (if that makes sense). The VMMaker/Bochs plugin pair decorates the code beautifully. e.g.</div>
<div><br></div><div>Cogit chooseCogitClass genAndDis: (Point >> #setX:setY:)</div><div><br></div><div>generates the following if you choose SimpleStackBasedCogit:</div><div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>E68</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>objhdr: 1003</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>nArgs: 2<span class="Apple-tab-span" style="white-space:pre">        </span>type: 2</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>blksiz: C0</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>method: 100040</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mthhdr: 4100801</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>selctr: 100048=setX:setY:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>blkentry: 0</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>stackCheckOffset: 53/EBB</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e80: xorl %edx, %edx : 31 D2 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e82: call .+0xfffffb61 (0x000009e8=ceMethodAbort) : E8 61 FB FF FF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e87: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>entry:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e88: movl %edx, %eax : 89 D0 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e8a: andl $0x00000001, %eax : 83 E0 01 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e8d: jnz .+0x00000010 (0x00000e9f=setX:setY:@37) : 75 10 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e8f: movl %ds:(%edx), %eax : 8B 02 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e91: shrl $0x0a, %eax : C1 E8 0A </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e94: andl $0x0000007c, %eax : 83 E0 7C </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e97: jnz .+0x00000006 (0x00000e9f=setX:setY:@37) : 75 06 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e99: movl %ds:0xfffffffc(%edx), %eax : 8B 42 FC </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e9c: andl $0xfffffffc, %eax : 83 E0 FC </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000e9f: cmpl %ecx, %eax : 39 C8 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ea1: jnz .+0xffffffdf (0x00000e82=setX:setY:@1A) : 75 DF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>noCheckEntry:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ea3: pushl %ebp : 55 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ea4: movl %esp, %ebp : 89 E5 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ea6: pushl $0x00000e68=setX:setY:@0 : 68 68 0E 00 00 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>IsAbsPCReference:</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eab: movl $0x00100000=nil, %ebx : BB 00 00 10 00 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eb0: pushl %ebx : 53 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eb1: pushl %edx : 52 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eb2: movl %ds:0x20000=stackLimit, %eax : A1 00 00 02 00 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eb7: cmpl %eax, %esp : 39 C4 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eb9: jb .+0xffffffc5 (0x00000e80=setX:setY:@18) : 72 C5 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>HasBytecodePC:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ebb: movl 12(%ebp), %eax : 8B 45 0C </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ebe: pushl %eax : 50 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ebf: movl -12(%ebp), %edx : 8B 55 F4 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ec2: popl %ecx : 59 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ec3: movl %ecx, %ds:0x4(%edx) : 89 4A 04 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ec6: movl %ecx, %eax : 89 C8 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ec8: andl $0x00000001, %eax : 83 E0 01 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ecb: jnz .+0x0000001a (0x00000ee7=setX:setY:@7F) : 75 1A </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ecd: movl %ds:0x4e5e400, %eax : A1 00 E4 E5 04 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ed2: cmpl %eax, %edx : 39 C2 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ed4: jnb .+0x00000011 (0x00000ee7=setX:setY:@7F) : 73 11 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ed6: cmpl %eax, %ecx : 39 C1 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ed8: jb .+0x0000000d (0x00000ee7=setX:setY:@7F) : 72 0D </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eda: movb %ds:0x3(%edx), %al : 8A 42 03 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000edd: andl $0x00000040, %eax : 83 E0 40 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ee0: jnz .+0x00000005 (0x00000ee7=setX:setY:@7F) : 75 05 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ee2: call .+0xfffffda1 (0x00000c88=ceStoreCheckTrampoline) : E8 A1 FD FF FF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>IsRelativeCall:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ee7: movl 8(%ebp), %eax : 8B 45 08 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eea: pushl %eax : 50 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eeb: movl -12(%ebp), %edx : 8B 55 F4 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eee: popl %ecx : 59 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000eef: movl %ecx, %ds:0x8(%edx) : 89 4A 08 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ef2: movl %ecx, %eax : 89 C8 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ef4: andl $0x00000001, %eax : 83 E0 01 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ef7: jnz .+0x0000001a (0x00000f13=setX:setY:@AB) : 75 1A </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000ef9: movl %ds:0x4e5e400, %eax : A1 00 E4 E5 04 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000efe: cmpl %eax, %edx : 39 C2 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f00: jnb .+0x00000011 (0x00000f13=setX:setY:@AB) : 73 11 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f02: cmpl %eax, %ecx : 39 C1 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f04: jb .+0x0000000d (0x00000f13=setX:setY:@AB) : 72 0D </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f06: movb %ds:0x3(%edx), %al : 8A 42 03 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f09: andl $0x00000040, %eax : 83 E0 40 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f0c: jnz .+0x00000005 (0x00000f13=setX:setY:@AB) : 75 05 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f0e: call .+0xfffffd75 (0x00000c88=ceStoreCheckTrampoline) : E8 75 FD FF FF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>IsRelativeCall:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f13: movl -12(%ebp), %edx : 8B 55 F4 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f16: movl %ebp, %esp : 89 EC </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f18: popl %ebp : 5D </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f19: ret $0x000c : C2 0C 00 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f1c: nop : 90 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f1d: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f1e: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f1f: nop : 90 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00000f20: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>startpc: 12</div><div><span class="Apple-tab-span" style="white-space:pre">                </span> 16rEAB IsAbsPCReference (16rF27)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span> 16rEBB HasBytecodePC (16rF26, bc: 12)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span> 16rEE7 IsRelativeCall (16rF24)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span> 16rF13 IsRelativeCall (16rF22)</div></div><div><br></div><div>and the following if you choose StackToRegisterMappingCogit:</div><div><br></div><div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>1128</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>objhdr: 1003</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>nArgs: 2<span class="Apple-tab-span" style="white-space:pre">        </span>type: 2</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>blksiz: B8</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>method: 100040</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mthhdr: 4100801</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>selctr: 100048=setX:setY:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>blkentry: 0</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>stackCheckOffset: 53/117B</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001140: xorl %edx, %edx : 31 D2 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001142: call .+0xfffff9b1 (0x00000af8=ceMethodAbortNArgs) : E8 B1 F9 FF FF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001147: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>entry:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001148: movl %edx, %eax : 89 D0 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>0000114a: andl $0x00000001, %eax : 83 E0 01 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>0000114d: jnz .+0x00000010 (0x0000115f=setX:setY:@37) : 75 10 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>0000114f: movl %ds:(%edx), %eax : 8B 02 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001151: shrl $0x0a, %eax : C1 E8 0A </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001154: andl $0x0000007c, %eax : 83 E0 7C </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001157: jnz .+0x00000006 (0x0000115f=setX:setY:@37) : 75 06 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001159: movl %ds:0xfffffffc(%edx), %eax : 8B 42 FC </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>0000115c: andl $0xfffffffc, %eax : 83 E0 FC </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>0000115f: cmpl %ecx, %eax : 39 C8 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001161: jnz .+0xffffffdf (0x00001142=setX:setY:@1A) : 75 DF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>noCheckEntry:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001163: pushl %ebp : 55 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001164: movl %esp, %ebp : 89 E5 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001166: pushl $0x00001128=setX:setY:@0 : 68 28 11 00 00 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>IsAbsPCReference:</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>0000116b: movl $0x00100000=nil, %ebx : BB 00 00 10 00 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001170: pushl %ebx : 53 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001171: pushl %edx : 52 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001172: movl %ds:0x20000=stackLimit, %eax : A1 00 00 02 00 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001177: cmpl %eax, %esp : 39 C4 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001179: jb .+0xffffffc5 (0x00001140=setX:setY:@18) : 72 C5 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>HasBytecodePC:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>0000117b: movl 12(%ebp), %ecx : 8B 4D 0C </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>0000117e: movl -12(%ebp), %edx : 8B 55 F4 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001181: movl %ecx, %ds:0x4(%edx) : 89 4A 04 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001184: movl %ecx, %eax : 89 C8 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001186: andl $0x00000001, %eax : 83 E0 01 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001189: jnz .+0x0000001a (0x000011a5=setX:setY:@7D) : 75 1A </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>0000118b: movl %ds:0x4e5e400, %eax : A1 00 E4 E5 04 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001190: cmpl %eax, %edx : 39 C2 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001192: jnb .+0x00000011 (0x000011a5=setX:setY:@7D) : 73 11 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001194: cmpl %eax, %ecx : 39 C1 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>00001196: jb .+0x0000000d (0x000011a5=setX:setY:@7D) : 72 0D </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>00001198: movb %ds:0x3(%edx), %al : 8A 42 03 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>0000119b: andl $0x00000040, %eax : 83 E0 40 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>0000119e: jnz .+0x00000005 (0x000011a5=setX:setY:@7D) : 75 05 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011a0: call .+0xfffffd53 (0x00000ef8=ceStoreCheckTrampoline) : E8 53 FD FF FF </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>IsRelativeCall:</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011a5: movl 8(%ebp), %ecx : 8B 4D 08 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011a8: movl %ecx, %ds:0x8(%edx) : 89 4A 08 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011ab: movl %ecx, %eax : 89 C8 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011ad: andl $0x00000001, %eax : 83 E0 01 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011b0: jnz .+0x0000001a (0x000011cc=setX:setY:@A4) : 75 1A </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011b2: movl %ds:0x4e5e400, %eax : A1 00 E4 E5 04 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011b7: cmpl %eax, %edx : 39 C2 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011b9: jnb .+0x00000011 (0x000011cc=setX:setY:@A4) : 73 11 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011bb: cmpl %eax, %ecx : 39 C1 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011bd: jb .+0x0000000d (0x000011cc=setX:setY:@A4) : 72 0D </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011bf: movb %ds:0x3(%edx), %al : 8A 42 03 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011c2: andl $0x00000040, %eax : 83 E0 40 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011c5: jnz .+0x00000005 (0x000011cc=setX:setY:@A4) : 75 05 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011c7: call .+0xfffffd2c (0x00000ef8=ceStoreCheckTrampoline) : E8 2C FD FF FF </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>IsRelativeCall:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011cc: movl -12(%ebp), %edx : 8B 55 F4 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011cf: movl %ebp, %esp : 89 EC </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011d1: popl %ebp : 5D </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011d2: ret $0x000c : C2 0C 00 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011d5: nop : 90 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>000011d6: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011d7: nop : 90 </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>000011d8: nop : 90 </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>startpc: 12</div><div><span class="Apple-tab-span" style="white-space:pre">                </span> 16r116B IsAbsPCReference (16r11DF)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span> 16r117B HasBytecodePC (16r11DE, bc: 12)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span> 16r11A5 IsRelativeCall (16r11DC)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span> 16r11CC IsRelativeCall (16r11DA)</div>
</div><div><br></div><div>(spot the difference?)</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>and that answers a possible machine code for that compiled method ? is that possible ? Sorry for my ignorance if this is absurd.<br>
</blockquote><div><br></div><div>Far from it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>if you provide me such method I plan to build a little browser on top of that. <br></blockquote><div><br></div><div>Go for it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>Thanks<br clear="all"><br>-- <br>Mariano<br><a href="http://marianopeck.wordpress.com" target="_blank">http://marianopeck.wordpress.com</a><br>
<br>
<br></blockquote></div><br>