1
A
回答
2
我只想直接載入到gdb
和指令通過它一步指令,監控所有的寄存器和存儲器的內容爲你走。
我確定我沒有告訴你任何你不知道的東西,但程序似乎很簡單,可以保證這種方法。我會留下一些奇怪的調試技巧,比如回溯(甚至是斷點)以獲得更復雜的代碼。
至於具體問題(以下轉述碼):
extern printf
SECTION .data
format: db "%d",0
SECTION .bss
v_0: resb 4
SECTION .text
global main
main:
push 5
pop eax
mov [v_0], eax
mov eax, v_0
push eax
call printf
你似乎到堆中,其後是5的內存(v_0
)地址只是推5。我很確定,如果你想撥打printf
,你需要在某個時候推送格式字符串的地址。這不會被認爲是一種流氓格式字符串。
這可能是因爲你的:
mov eax, v_0
應該是:
mov eax, format
,我假設有這麼調用printf
後,更多的代碼,你只是離開不重要(否則,當它返回時,你將永遠不會着陸)。
1
鏈接代碼(使用gcc)時,您仍應該能夠使用Stabs標記進行組裝。
我建議使用YASM與-dstabs
選擇組裝:
$ yasm -felf64 -mamd64 -dstabs file.asm
這是我組裝我的彙編程序。 NASM和YASM代碼大部分是可互換的(YASM有一些在NASM中不可用的擴展,但是每個NASM代碼都與YASM很好地組裝在一起)。
我使用gcc將我的彙編對象文件鏈接在一起,或與C或C++代碼編譯時。使用gcc時,我使用-gstabs+
用調試標記進行編譯。
相關問題
- 1. GDB彙編程序調試
- 2. 如何調試x86彙編
- 3. 如何調用匯編程序
- 4. 如何添加調試信息到彙編程序輸出
- 5. 學習彙編語言如何幫助我調試C程序?
- 6. 調用匯編程序
- 7. 「彙編」與「彙編程序」
- 8. 在調試彙編程序時遇到問題排序日期
- 9. 彙編程序
- 10. 調試反彙編代碼
- 11. NASM彙編調試器
- 12. 在C++中調用匯編程序
- 13. Intel 8086彙編程序從C調用
- 14. 兩通匯編程序如何處理由彙編程序擴展的指令?
- 15. 使用反彙編程序來調試錯誤Python
- 16. 可定製的彙編程序/調試器/機器模擬器
- 17. XCode調試器:爲什麼只顯示我的彙編程序?
- 18. QtCreator調試器只顯示彙編程序
- 19. 如何使用gdb調試到C程序的相應反彙編?
- 20. 如何在調試android應用程序時獲取反彙編代碼?
- 21. 彙編8086程序
- 22. NASM彙編程序
- 23. 如何調用匯編
- 24. 如何在彙編程序中測試變量的相等性?
- 25. 如何反彙編VC++應用程序?
- 26. 如何實現彙編程序
- 27. Windows如何執行彙編程序?
- 28. 如何防止彙編程序編譯16位應用程序?
- 29. 彙編:編譯COM程序
- 30. 如何從內聯彙編程序調用Win32 API函數?
確切的問題 - 我剛剛發現!謝謝! – 2010-09-09 04:05:20