答えはありませんが参考になる場合があります。私は64ビットUbuntuで逆アセンブルしています。 32ビットでは、それは異なるでしょう。
(gdb) disassemble /mr func,0x60108A
Dump of assembler code from 0x601040 to 0x60108a:
0x0000000000601040 <code+0>: eb 19 jmp 0x60105b <code+27>
0x0000000000601042 <code+2>: 31 c0 xor %eax,%eax
0x0000000000601044 <code+4>: 31 db xor %ebx,%ebx
0x0000000000601046 <code+6>: 31 d2 xor %edx,%edx
0x0000000000601048 <code+8>: 31 c9 xor %ecx,%ecx
0x000000000060104a <code+10>: b0 04 mov $0x4,%al
0x000000000060104c <code+12>: b3 01 mov $0x1,%bl
0x000000000060104e <code+14>: 59 pop %rcx
0x000000000060104f <code+15>: b2 05 mov $0x5,%dl
0x0000000000601051 <code+17>: cd 80 int $0x80
0x0000000000601053 <code+19>: 31 c0 xor %eax,%eax
0x0000000000601055 <code+21>: b0 01 mov $0x1,%al
0x0000000000601057 <code+23>: 31 db xor %ebx,%ebx
0x0000000000601059 <code+25>: cd 80 int $0x80
0x000000000060105b <code+27>: e8 e2 ff ff ff callq 0x601042 <code+2>
0x0000000000601060 <code+32>: 68 65 6c 6c 6f pushq $0x6f6c6c65
0x0000000000601065 <code+37>: e8 d8 ff ff ff callq 0x601042 <code+2>
0x000000000060106a <code+42>: 68 65 6c 6c 6f pushq $0x6f6c6c65
0x000000000060106f <code+47>: e8 ce ff ff ff callq 0x601042 <code+2>
0x0000000000601074 <code+52>: 68 65 6c 6c 6f pushq $0x6f6c6c65
0x0000000000601079 <code+57>: e8 c4 ff ff ff callq 0x601042 <code+2>
0x000000000060107e <code+62>: 68 65 6c 6c 6f pushq $0x6f6c6c65
0x0000000000601083 <code+67>: e8 ba ff ff ff callq 0x601042 <code+2>
0x0000000000601088 <code+72>: 68 65 6c 6c 6f pushq $0x6f6c6c65
それは非常に最初の行にSIGSEGVで失敗します。
(gdb) display /3i $pc
1: x/3i $pc
=> 0x601040 <code>: jmp 0x60105b <code+27>
0x601042 <code+2>: xor %eax,%eax
0x601044 <code+4>: xor %ebx,%ebx
それはデータセグメントにあるため、ジャンプの失敗もいいですか?
どうしますか?つまり、分解などを見せることができますか? –
あなたがむしろ尋ねるべき質問は、なぜ、どのように動作すべきかということです。 – nos
シェルコードは正しいですか? –