Compiler Explorer似乎能够可靠地找到与函数对应的汇编代码。x86_64-unknown-linux-gnu
假设一个工具链、一个常规(无属性)函数,并且没有额外的工具,我怎么能自己做到这一点cargo-asm
?
我知道要生成程序集,我可以使用rustc's --emit asm
flag。有人可能认为找到函数就像在 .s 文件中搜索其名称一样容易,但我发现并非如此。
例如,.s 文件通常甚至没有提及函数名称,在这种情况下,添加#[inline(never)]
到函数中会有所帮助。其次,找到带有函数名称的标签后,如何确定函数的结束位置?在我的测试箱中,我发现在更下方的指令中再次提到了函数名称.size
——这可能标志着函数的结束吗?或者它可能是retq
函数启动后的第一个?
假设这个目标是可以实现的,我希望学习:
- 找到函数的开始和结束的最可靠方法是什么?
- 获得合适的汇编文件的先决条件是什么?