相关疑难解决方法(0)

通过linux x86-64函数调用保留了哪些寄存器

我相信我理解linux x86-64 ABI如何使用寄存器和堆栈将参数传递给函数(参见之前的ABI讨论).我感到困惑的是,在函数调用中是否预期保留了哪些寄存器.也就是说,哪些寄存器被保证不被破坏?

linux assembly x86-64 abi

38
推荐指数
3
解决办法
2万
查看次数

x86汇编 - 为什么[e] bx保留在调用约定中?

我注意到很多调用约定都坚持为被调用者保留[e] bx.

现在,我可以理解为什么他们会保留像[e] sp或[e] bp这样的东西,因为这会弄乱被调用者的堆栈.我也可以理解为什么你可能想要保留[e] si或[e] di,因为如果他们不是特别小心的话可以打破被调用者的字符串指令.

但是[e] bx?究竟是什么对[e] bx如此重要?是什么让[e] bx如此特殊以至于多个调用约定都坚持在整个函数调用中保留它?

是否有某种微妙的错误/陷阱可能会因为[e] bx的混乱而产生?

修改[e] bx对被调用者的影响是否比修改[e] dx或[e] cx更大?

我只是不明白为什么这么多的召唤惯例单独列出[e] bx进行保存.

x86 assembly calling-convention

5
推荐指数
3
解决办法
924
查看次数

标签 统计

assembly ×2

abi ×1

calling-convention ×1

linux ×1

x86 ×1

x86-64 ×1