有人告诉我使用反汇编程序。 gcc
有什么内置的吗?最简单的方法是什么?
原文由 Syntax_Error 发布,翻译遵循 CC BY-SA 4.0 许可协议
有人告诉我使用反汇编程序。 gcc
有什么内置的吗?最简单的方法是什么?
原文由 Syntax_Error 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您有:
#include <iostream>
double foo(double x)
{
asm("# MyTag BEGIN"); // <- asm comment,
// used later to locate piece of code
double y = 2 * x + 1;
asm("# MyTag END");
return y;
}
int main()
{
std::cout << foo(2);
}
要使用 gcc 获取汇编代码,您可以执行以下操作:
g++ prog.cpp -c -S -o - -masm=intel | c++filt | grep -vE '\s+\.'
c++filt
符号
grep -vE '\s+\.'
去掉一些无用的信息
现在,如果您想可视化标记部分,只需使用:
g++ prog.cpp -c -S -o - -masm=intel | c++filt | grep -vE '\s+\.' | grep "MyTag BEGIN" -A 20
用我的电脑,我得到:
# MyTag BEGIN
# 0 "" 2
#NO_APP
movsd xmm0, QWORD PTR -24[rbp]
movapd xmm1, xmm0
addsd xmm1, xmm0
addsd xmm0, xmm1
movsd QWORD PTR -8[rbp], xmm0
#APP
# 9 "poub.cpp" 1
# MyTag END
# 0 "" 2
#NO_APP
movsd xmm0, QWORD PTR -8[rbp]
pop rbp
ret
.LFE1814:
main:
.LFB1815:
push rbp
mov rbp, rsp
更友好的方法是使用: Compiler Explorer
原文由 Picaud Vincent 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
我不认为
gcc
有它的标志,因为它主要是一个编译器,但另一个 GNU 开发工具有。objdump
采用-d
/--disassemble
标志:反汇编如下所示: