シンプルなASMプログラムを作成しましたが、sys_writeは出力を出していません。私は%ecxへのポインタで間違いを犯したと思うし、sys_writeは文字列にアクセスすることができませんが、これまでのところ間違いはありません。"Hello World" - サンプルがたくさんありますが、私が間違っていることを理解したいと思っています。他の作業コードがあります:-)
接頭辞付きのIntel構文を使用します。 gdbの出力は次のようになります。GNUアセンブラsys_writeが機能しません
gdb ./testsasm GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 ... Reading symbols from ./testsasm...done. (gdb) break main Breakpoint 1 at 0x4004d6: file t.asm, line 13. (gdb) n The program is not being run. (gdb) run Starting program: ...src/gnu_asm/testsasm Breakpoint 1, main() at t.asm:13 13 mov %ebx,0x1 # file handle stdout (gdb) n 14 mov %eax,0x4 # systemcall sys_write (gdb) n 15 mov %ecx,string # pointer of the string const (gdb) n 16 mov %edx,slen # string lenght (gdb) n 17 int 0x80 # call write (gdb) print $ecx $1 = 1819043144 (gdb) print $edx $2 = 7 (gdb) print *$ecx Cannot access memory at address 0x6c6c6548 (gdb)
Makefileとソースがここで見つけることができます:奇妙なhttp://paste.ubuntu.com/23115239
ありがとうございます! "OFFSET文字列"は正確なヘルプでした。 – 0x0C4