<br><br><div class="gmail_quote">On Sat, Apr 16, 2011 at 4:50 PM, Mariano Martinez Peck <span dir="ltr">&lt;<a href="mailto:marianopeck@gmail.com">marianopeck@gmail.com</a>&gt;</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 &gt;&gt; #lookupMethodInClass:) simulatedMachineCode<br></blockquote><div><br></div><div>Its easy to add a primitive to get the code.  What&#39;s problematic is decorating that code.  Decorating it involves knowing the names for the variables whose addresses appear in the machine code, and that&#39;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 &gt;&gt; #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>