1
我想知道如何查看傳遞給使用gdb函數的命令行參數。使用gdb檢查字符串
爲了驗證這一點,我整理了以下代碼
.global main
main:
pushl %ebp
movl %esp, %ebp
movl $1, %eax
movl $0, %ebx
int $0x80
與
gcc -Wall -Wextra -g -m32 args.s
調用匯編器和鏈接。
我的系統是x86_64 ubuntu(但爲了學習,我開始創建32位應用程序)。
我發起的gdb,並通過2命令行參數與
start test 12345
在這一點上,我希望堆棧看起來像這樣:
- 地址參數2 < - $ EBP + 20
- 地址參數1 < - $ ebp + 16
- 程序的地址名稱< - $ ebp + 12
- ARGC < - $ EBP + 8
- 老EIP < - $ EBP + 4
- 老EBP < - $ EBP
讀取參數計數器
(gdb) x /d $ebp+8
給出了預期的輸出:
0xffffd110: 3
現在我試圖檢查已通過的命令行參數。我預計
x /x $ebp+16
給出內存中第一個參數的第一個字符的地址。輸出是:
0xffffd118: 0xb4
但是當我試圖訪問該地區
(gdb) x /x 0xb4
我:
0xb4: Cannot access memory at address 0xb4
這使我對我試圖訪問某個位置的結論,與我的命令行參數存儲的位置不同。
任何人都可以給我一些指向命令行參數的真實位置的指針嗎?