Skip to main content

Instruction Set Architecture

We compiled the small Manticore challenge in 5 different architectures. You can move around and see the difference between their disassembly.

Manticore

00000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f00000060000000610000006200000063000000640
7f45 4c46 0101 0100 0000 0000 0000 0000 0200 0300 0100 0000 0283 0408 3400 0000 3005 0000 0000 0000 3400 2000 0200 2800 0700 0600 0100 0000 7400 0000 7480 0408 7480 0408 b802 0000 bc12 0000 0700 0000 0400 0000 51e5 7464 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0600 0000 1000 0000 8d4c 2404 83e4 f0ff 71fc 5589 e553 518d 5dec 83ec 1c68 1583 0408 e840 0200 0083 c40c ff35 2c93 0408 6a0c 53e8 e701 0000 891c 24e8 4701 0000 c704 2422 8304 08e8 1b02 0000 8d65 f831 c059 5b5d 8d61 fcc3 5589 e583 ec08 807d 083d 740a 83ec 0c6a 01e8 1a02 0000 c9b8 0100 0000 c355 89e5 83ec 0880 7d08 4d74 0a83 ec0c 6a01 e8fd 0100 00c9 b801 0000 00c3 5589 e583 ec08 8b45 088d 4400 7a3c fc74 0a83 ec0c 6a01 e8db 0100 00c9 b801 0000 00c3 5589 e583 ec08 807d 084e 740a 83ec 0c6a 01e8 be01 0000 c9b8 0100 0000 c355 89e5 83ec 088b 4508 01c0 3ca8 740a 83ec 0c6a 01e8 9e01 0000 c9b8 0100 0000 c355 89e5 83ec 0880 7d08 4974 0a83 ec0c 6a01 e881 0100 00c9 b801 0000 00c3 5589 e583 ec08 807d 0843 740a 83ec 0c6a 01e8 6401 0000 c9b8 0100 0000 c355 89e5 83ec 0880 7d08 4f74 0a83 ec0c 6a01 e847 0100 00c9 b801 0000 00c3 5589 e583 ec08 807d 0852 740a 83ec 0c6a 01e8 2a01 0000 c9b8 0100 0000 c355 89e5 83ec 0880 7d08 4574 0a83 ec0c 6a01 e80d 0100 00c9 b801 0000 00c3 e9d1 feff ff55 89e5 5383 ec10 8b5d 080f be03 50e8 befe ffff 0fbe 4301 8904 24e8 cffe ffff 0fbe 4302 8904 24e8 e0fe ffff 0fbe 4303 8904 24e8 f6fe ffff 0fbe 4304 8904 24e8 07ff ffff 0fbe 4305 8904 24e8 1bff ffff 0fbe 4306 8904 24e8 2cff ffff 0fbe 4307 8904 24e8 3dff ffff 0fbe 4308 8904 24e8 4eff ffff 0fbe 4309 8904 24e8 5fff ffff 0fbe 430a 8904 24e8 46fe ffff 8b5d fc83 c410 b801 0000 00c9 c355 b801 0000 0089 e557 5653 518b 7508 29f0 8945 f08b 45f0 89f7 01f0 3945 0c7e 1c8b 5d10 b803 0000 0089 f1ba 0100 0000 cd80 85c0 7407 4680 7eff 0a75 d8c6 0700 8b45 085a 5b5e 5f5d c355 31d2 89e5 538b 4d08 803c 1100 7403 42eb f7b8 0400 0000 bb01 0000 00cd 805b 5dc3 55b8 0100 0000 89e5 538b 5d08 cd80 5589 e553 50e8 68fd ffff 89c3 b801 0000 00cd 8045 6e74 6572 2063 6f64 653a 0a00 5375 6363 6573 7321 0a00 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 9781 0408 1d00 0000 1200 0100 0e00 0000 8b82 0408 4800 0000 1200 0100 1400 0000 d382 0408 2100 0000 1200 0100 1900 0000 3d81 0408 2000 0000 1200 0100 2600 0000 ee81 0408 0500 0000 1200 0100 3400 0000 d181 0408 1d00 0000 1200 0100 4100 0000 fe80 0408 2200 0000 1200 0100 4e00 0000 c480 0408 1d00 0000 1200 0100 5b00 0000 f381 0408 9800 0000 1200 0100 6100 0000 0283 0408 1300 0000 1200 0100 6800 0000 7a81 0408 1d00 0000 1200 0100 7500 0000 2081 0408 1d00 0000 1200 0100 8200 0000 7480 0408 5000 0000 1200 0100 8700 0000 e180 0408 1d00 0000 1200 0100 9400 0000 b481 0408 1d00 0000 1200 0100 a100 0000 5d81 0408 1d00 0000 1200 0100 ae00 0000 f482 0408 0e00 0000 1200 0100 0063 6865 636b 5f63 6861 725f 3700 6667 6574 7300 7075 7473 0063 6865 636b 5f63 6861 725f 3400 6368 6563 6b5f 6368 6172 5f31 3000 6368 6563 6b5f 6368 6172 5f39 0063 6865 636b 5f63 6861 725f 3200 6368 6563 6b5f 6368 6172 5f30 0063 6865 636b 005f 7374 6172 7400 6368 6563 6b5f 6368 6172 5f36 0063 6865 636b 5f63 6861 725f 3300 6d61 696e 0063 6865 636b 5f63 6861 725f 3100 6368 6563 6b5f 6368 6172 5f38 0063 6865 636b 5f63 6861 725f 3500 6578 6974 0000 2e73 796d 7461 6200 2e73 7472 7461 6200 2e73 6873 7472 7461 6200 2e74 6578 7400 2e72 6f64 6174 6100 2e62 7373 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1b00 0000 0100 0000 0600 0000 7480 0408 7400 0000 a102 0000 0000 0000 0000 0000 0100 0000 0000 0000 2100 0000 0100 0000 3200 0000 1583 0408 1503 0000 1700 0000 0000 0000 0000 0000 0100 0000 0100 0000 2900 0000 0800 0000 0300 0000 2c93 0408 2c03 0000 0400 0000 0000 0000 0000 0000 0400 0000 0000 0000 0100 0000 0200 0000 0000 0000 0000 0000 2c03 0000 2001 0000 0500 0000 0100 0000 0400 0000 1000 0000 0900 0000 0300 0000 0000 0000 0000 0000 4c04 0000 b300 0000 0000 0000 0000 0000 0100 0000 0000 0000 1100 0000 0300 0000 0000 0000 0000 0000 ff04 0000 2e00 0000 0000 0000 0000 0000 0100 0000 0000 0000
Legend
Headers Magic
Code Instructions
Read-Only Data Strings
Data Other Sections
ELF Header:
  Class:               ELF32                        
  Data:                2's complement, little endian
  Type:                EXEC                         
  Machine:             x86                          
  Entry point address: 0x8048302                    

Section Headers:
  [Nr] Name      Type     Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]           NULL     00000000 000000 000000 00      0   0  0
  [ 1] .text     PROGBITS 08048074 000074 0002a1 00  AX  0   0  1
  [ 2] .rodata   PROGBITS 08048315 000315 000017 01 AMS  0   0  1
  [ 3] .bss      NOBITS   0804932c 00032c 000004 00  WA  0   0  4
  [ 4] .symtab   SYMTAB   00000000 00032c 000120 10      5   1  4
  [ 5] .strtab   STRTAB   00000000 00044c 0000b3 00      0   0  1
  [ 6] .shstrtab STRTAB   00000000 0004ff 00002e 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), G (group), T (TLS), O (extra OS processing required)

Symbol table '.symtab' contains 18 entries:
  Num:    Value Size Type   Bind   Section Name         
    0: 00000000    0 NOTYPE LOCAL  UND                  
    1: 08048197   29 FUNC   GLOBAL .text   check_char_7 
    2: 0804828b   72 FUNC   GLOBAL .text   fgets        
    3: 080482d3   33 FUNC   GLOBAL .text   puts         
    4: 0804813d   32 FUNC   GLOBAL .text   check_char_4 
    5: 080481ee    5 FUNC   GLOBAL .text   check_char_10
    6: 080481d1   29 FUNC   GLOBAL .text   check_char_9 
    7: 080480fe   34 FUNC   GLOBAL .text   check_char_2 
    8: 080480c4   29 FUNC   GLOBAL .text   check_char_0 
    9: 080481f3  152 FUNC   GLOBAL .text   check        
   10: 08048302   19 FUNC   GLOBAL .text   _start       
   11: 0804817a   29 FUNC   GLOBAL .text   check_char_6 
   12: 08048120   29 FUNC   GLOBAL .text   check_char_3 
   13: 08048074   80 FUNC   GLOBAL .text   main         
   14: 080480e1   29 FUNC   GLOBAL .text   check_char_1 
   15: 080481b4   29 FUNC   GLOBAL .text   check_char_8 
   16: 0804815d   29 FUNC   GLOBAL .text   check_char_5 
   17: 080482f4   14 FUNC   GLOBAL .text   exit
tip
BINSEC is able to solves them all with a unique script.
load sections .text, .rodata from file
starting from <main>
with concrete stack pointer

replace <fgets> (s, size, _) by
size := size - 1
@[s + size] := 0
while size > 0 do
size := size - 1
@[s + size] := stdin[size]
end
return s
end

replace <puts> (s) by
print c string @[s]
reach such that @[s, 10] = 'Success!\n'z then print c string stdin
return
end

halt at <exit>
Output