2017-02-02 6 views
0

私は最近、ハッキングに関する書籍や記事を読むことに興味がありました。その結果、ハッキング:搾取の技術はタイトルを読む必要があります。私は、標準的なLinuxツールを使って作業し、コードを分析する方法(プログラミングの章)に関する基本的なチュートリアルに従っています。私はプログラミングの初心者ではありませんが、Linux端末で作業することは私のためには非常に新しいものです。私はKali Linuxの最新リリースを使用しています。(GDB)ブレークポイントと逆アセンブル

今、私の単純なプログラムは、スタックセグメントの仕組みを分析するために使用する必要があります。

int main(){ 
    void stack_func(int a,int b, int c, int d){ 
    char first; 
    int second; 

    first = 'c'; 
    second = 220; 
    } 

    stack_func(1,2,3,4); 
    return 0; 
} 

最初の問題は、私は内部機能のために任意のブレークポイントを追加することはできませんです。 のstack_func()のような関数も、strcpyなどのライブラリの関数もありません。この本によれば、保留中のブレークポイントは解決するはずです。私のことは無視され、プログラムは終了します。

[email protected]:~/Folder# gdb -q ./stack 
Reading symbols from ./stack...done. 
(gdb) b stack_func 
Function "stack_func" not defined. 
Make breakpoint pending on future shared library load? (y or [n]) y 
Breakpoint 1 (stack_func) pending. 
(gdb) run 
Starting program: /root/Folder/stack 
[Inferior 1 (process 20421) exited normally] 
(gdb) 

第二の問題は、を逆アセンブルはまた私の機能のために動作しないことです。繰り返しになりますが、この本によれば、私の関数のアセンブラコードを見ることができるはずですstack_func()しかし結果は以下の通りです。

(gdb) disass stack_func() 
No symbol "stack_func" in current context. 
(gdb) 

テキストの文法上の誤りについてはお答えします。 :)

+0

あなたの無副作用機能はおそらく、コンパイラによって除去されるのか、少なくともインラインで –

+0

'main'の外で' stack_func'を動かしてみましたか? –

+0

ええ、私は今このようなエラーメッセージを試しました。 「デバッグするプロセスがなければ、それを行うことはできません。」 – Jacobe

答えて

1

問題はstack_funcを別の機能の中に定義したことです。これはnested functionと呼ばれ、GNU Cではgccの拡張機能です。この関数には、あなたが予想している以外のシンボル名が少し​​あります。

[ tmp]$ nm a.out |grep stack_func 
00000000004004a6 t stack_func.1761 

そして、設定されたブレークポイントとGDBで逆アセンブル:あなたはnmツールを使用することができ、それの正確なシンボル名を見つけるために

[ tmp]$ gdb -q ./a.out 
Reading symbols from ./a.out...done. 
(gdb) b 'stack_func.1761' 
Breakpoint 1 at 0x4004ba: file 111.c, line 6. 
(gdb) disassemble 'stack_func.1761' 
Dump of assembler code for function stack_func: 
    0x00000000004004a6 <+0>: push %rbp 
    0x00000000004004a7 <+1>: mov %rsp,%rbp 
    0x00000000004004aa <+4>: mov %edi,-0x14(%rbp) 
    0x00000000004004ad <+7>: mov %esi,-0x18(%rbp) 
    0x00000000004004b0 <+10>: mov %edx,-0x1c(%rbp) 
    0x00000000004004b3 <+13>: mov %ecx,-0x20(%rbp) 
    0x00000000004004b6 <+16>: mov %r10,-0x28(%rbp) 
    0x00000000004004ba <+20>: movb $0x63,-0x1(%rbp) 
    0x00000000004004be <+24>: movl $0xdc,-0x8(%rbp) 
    0x00000000004004c5 <+31>: nop 
    0x00000000004004c6 <+32>: pop %rbp 
    0x00000000004004c7 <+33>: retq 
End of assembler dump. 
(gdb) 
関連する問題