amiwrong123 最近的时间轴更新
amiwrong123
ONLINE

amiwrong123

V2EX 第 417414 号会员,加入于 2019-06-01 12:17:41 +08:00
今日活跃度排名 17
这个味道,是BUG的味道!
根据 amiwrong123 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
amiwrong123 最近回复了
@adoal #12
嗯嗯,你的主要意思是:
如果没有 BP ,那么用其他 通用寄存器来当 BP 来用,也是一样的。

在 RISC 里,甚至 SP 都可以用 其他通用寄存器 来代替。
@vituralfuture #10
谢谢。这就是我想要的答案。
也就是说,默认编译出来的汇编,每个函数都会去使用 rbp 的。
但是如果加了-fomit-frame-pointer 参数,那么每个函数就不会去使用 rbp 了。

所以结论就是:函数调用过程中,可以不使用 rbp 。
这里写错了
@amiwrong123 #6
这里写了,比如一个函数的汇编里面:
sub $0x30, %rsp
之后取局部变量时,都是用-0x10(%rbp)、-0x20(%rbp)、-0x30(%rbp)来取 各个局部变量的。
@shawnsh #5
嗯,确实。
很多时候,可能必须用栈 来传递参数。这个时候,只有 rbp 记录了 上一个函数的栈帧基地址(刚进入下一个函数时),如果没有 rbp 就不好办了还。
@shawnsh #1
@ThirdFlame #2
我好像懂你俩的意思了,比如一个函数的汇编里面:
sub $0x10, %rsp
之后取局部变量时,都是用-0x10(%rsp)来取 局部变量的。

是这个意思吧?
@shawnsh #1
你是指,函数调用传参,不是通过寄存器传递;而是通过栈来传递参数的情况呗?
@XiaoxiaoPu #3
OK ,大概理解了。还有个问题,我这不是纯 c 编译吗,怎么还有左值右值的概念。

我一直以为只有 c++有左值右值的概念。

原来纯 c 也有啊
@hello2090 #1
写成+1 没问题?

是的,不会报错的。我只是在想,为啥这样写会报错。
@MrMissBlack #5
“第一种是 gdbinit 里面加绝对路径,第二种是把这个文件改名,riscv 版本是这么做的”
嗯嗯,你说的这种方法肯定是可以的。

不过感觉是 VSCode 的 gdb 没有处理好 这个相对路径问题,毕竟直接使用 gdb 命令,都是可以正常读取 gdbinit 文件的这个相对路径 obj/boot/boot.out 的。

感觉就像是 VSCode 的 gdb 没有先 cd 到${workspaceFolder}再执行一样,估计还有什么参数我没设置。

“最后可以在 VSCode 里面手动加载符号文件,搜索 setupCommands”
是的,这个我自己加好了:
{
"text": "symbol-file ${workspaceFolder}/obj/boot/boot.out",
"ignoreFailures": true
}
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2557 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 08:33 · PVG 16:33 · LAX 01:33 · JFK 04:33
Developed with CodeLauncher
♥ Do have faith in what you're doing.