Linux C程序存储$rbp+;4在内存中?我的支票失败了
我试图学习如何使用rbp/ebp访问ubuntu1604 64位上的函数参数和局部变量。我有一个简单的c文件:Linux C程序存储$rbp+;4在内存中?我的支票失败了,linux,function,parameters,gdb,rbp,Linux,Function,Parameters,Gdb,Rbp,我试图学习如何使用rbp/ebp访问ubuntu1604 64位上的函数参数和局部变量。我有一个简单的c文件: #include<stdio.h> int main(int argc,char*argv[]) { printf("hello\n"); return argc; } 我没有发现任何线索表明,$rbp+xBytes中的任何字节都保存了“3”的dword。我的理解或命令有什么错误吗 谢谢 我试图学习如何使用rbp/ebp访问函数参数和局部变量 x86_64不使用堆
#include<stdio.h>
int main(int argc,char*argv[])
{
printf("hello\n");
return argc;
}
我没有发现任何线索表明,$rbp+xBytes中的任何字节都保存了“3”的dword。我的理解或命令有什么错误吗
谢谢
我试图学习如何使用rbp/ebp访问函数参数和局部变量
x86_64
不使用堆栈传递参数;它们在寄存器中传递。因此,在$rbp
的任何偏移处都找不到它们(这与ix86
调用约定不同)
要查找参数,您需要查看$rdi
和$rsi
调节器:
Breakpoint 1, main (argc=3, argv=0x7fffffffe3a8) at my.c:4
4 printf("hello\n");
(gdb) p/x $rdi
$1 = 0x3 # matches argc
(gdb) p/x $rsi
$2 = 0x7fffffffe3a8 # matches argv
x$rbp+4
您几乎肯定不会在$rbp+4
中找到任何有用的内容,因为它通常会递增或递减8,以存储整个64位值
我试图学习如何使用rbp/ebp访问函数参数和局部变量
x86_64
不使用堆栈传递参数;它们在寄存器中传递。因此,在$rbp
的任何偏移处都找不到它们(这与ix86
调用约定不同)
要查找参数,您需要查看$rdi
和$rsi
调节器:
Breakpoint 1, main (argc=3, argv=0x7fffffffe3a8) at my.c:4
4 printf("hello\n");
(gdb) p/x $rdi
$1 = 0x3 # matches argc
(gdb) p/x $rsi
$2 = 0x7fffffffe3a8 # matches argv
x$rbp+4
您几乎肯定不会在
$rbp+4
上找到任何有用的东西,因为它通常会递增或递减8,以存储整个64位值。谢谢,那么如何通过$rsi?@HindForsum访问这两个参数呢?如上所示:第一个参数在$rdi
中,$rsi
中的第二个参数。谢谢,那么如何通过$rsi访问这两个参数?@HindForsum如上所示:第一个参数在$rdi
中,第二个参数在$rsi
中。