LoginSignup
tokumei_dayo
@tokumei_dayo

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

jz 命令のジャンプ距離が1足りない

Q&AClosed

jz 命令のジャンプ距離が1足りない

nasmアセンブラでコンパイルした結果出た .lst ファイル

268 00000108 7405                        jz _child ;7405では0000010Fまでジャンプできないはず。
269 0000010A E9F1FEFFFF                  jmp near _start
270                                  
271                                  _child:
272                                      ; getrandom システムコールを呼び出す
273 0000010F B83E010000                  mov eax, 318 ; getrandom のシステムコール番号

gdbでのデバック中

0x400178:       0x90    0x90    0x90    0x90    0x90    0x90    0x85    0xc0
0x400180:       0x74    0x05    0xe9    0xf1    0xfe    0xff    0xff    0xff
0x400188:       0xb8    0x3e    0x01    0x00    0x00    0xbf    0xfe    0x00
0x400190:       0x40    0x00    0xbe    0x00    0x01    0x00    0x00    0x31
0x400198:       0xd2    0x0f    0x05    0xe9    0xd9    0xfe    0xff    0xff
(gdb) stepi
0x0000000000400180 in ?? ()
(gdb) info registers
(中略)
rip            0x400180            0x400180
eflags         0x246               [ PF ZF IF ]#ゼロフラグが立っている。
(中略)
(gdb) stepi
0x0000000000400187 in ?? ()
(gdb) stepi

Thread 2.1 "ancestor" received signal SIGILL, Illegal instruction.
0x0000000000400187 in ?? ()

この様に、正しく動作していません。本来0x0000000000400188までジャンプすべきです。
nasmアセンブラはバグを起こしているのですか?

0

1Answer

自己解決されたのでしょうか?

.lstファイルのオフセットとgdbのメモリダンプで、1バイト(下記の黄色枠)の違いが出ていますね。
この結果、命令例外で落ちてますが、これをどう解決されたのでしょうか?
教えていただけるとありがたいです。

scr.png

0

Comments

  1. @tokumei_dayo

    Questioner

    手書きでELFファイルを書いていたので、修正しました😅
    ちゃんと理由を添えてクローズするべきでした。すみません。

  2. なるほど。。。

    教えていただきありがとうございました。

Your answer might help someone💌