2013-01-25 25 views
1

我從objdump獲得以下內容。這是由gcc爲IA32編譯的C代碼。Assembly cmp如何檢查它比較的值?

08048e9a <my_func>: 
8048e9a: 55      push %ebp 
8048e9b: 89 e5     mov %esp,%ebp 
8048e9d: 83 ec 48    sub $0x48,%esp 
8048ea0: 89 5d f4    mov %ebx,-0xc(%ebp) 
8048ea3: 89 75 f8    mov %esi,-0x8(%ebp) 
8048ea6: 89 7d fc    mov %edi,-0x4(%ebp) 
8048ea9: 8d 5d d0    lea -0x30(%ebp),%ebx 
8048eac: 89 5c 24 04    mov %ebx,0x4(%esp) 
8048eb0: 8b 45 08    mov 0x8(%ebp),%eax 
8048eb3: 89 04 24    mov %eax,(%esp) 
8048eb6: e8 52 04 00 00   call 804930d <read_num> 
8048ebb: 8d 7d dc    lea -0x24(%ebp),%edi 
8048ebe: be 00 00 00 00   mov $0x0,%esi 
8048ec3: 8b 03     mov (%ebx),%eax 
8048ec5: 3b 43 0c    cmp 0xc(%ebx),%eax 
8048ec8: 74 05     je  8048ecf <my_func+0x35> 
8048eca: e8 fc 03 00 00   call 80492cb <other_func> 
8048ecf: 03 33     add (%ebx),%esi 

我很感興趣,找出值進行比較就行8048ec5在gdb中我可以一步這條線,我可以讀%eax就好從info registers但我怎麼能讀0xc(%ebx)?這意味着0xc%ebx0xc + %ebx偏移?

+0

如果您有C(或C++)代碼,請使用'gcc -fverbose-asm -S'(和優化選項)進行編譯,並查看生成的'.s'文件。 –

回答

2

它指內存中地址爲%ebx + 0xc的32位值。

+0

謝謝,我該如何讀取gdb中的值? – no0neknow

+0

@ no0neknow查找gdb備忘單,教程,介紹等。 –

+0

@ no0neknow:它應該像'x/w $ ebx + 0xc'。請參閱http://www.delorie.com/gnu/docs/gdb/gdb_56.html – NPE