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
这使我对我试图访问某个位置的结论,与我的命令行参数存储的位置不同。
任何人都可以给我一些指向命令行参数的真实位置的指针吗?