在 C/C++ 中反汇编 Windows 上的内存函数
我使用 MSVC 2008。
假设我的代码中有一个函数:
int foo()
{
return 2 + 5;
}
我可以使用哪些工具在 X86 汇编器中获取此例程的 ASCII 表示?
void bar()
{
std::string s = disassemble(foo);
printf("%s\n", s.c_str());
}
I use MSVC 2008.
Let's say I have a function in my code:
int foo()
{
return 2 + 5;
}
What tools can I use to obtain ASCII representation of this routine in X86 assembler?
void bar()
{
std::string s = disassemble(foo);
printf("%s\n", s.c_str());
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用奇妙的BEAEngine 库。
You can use the marvelous BEAEngine library.
您可以通过单击“项目”->“属性”->“C++”->“汇编输出”来输出汇编代码,然后选择您的首选项,汇编文件将在您下次构建时创建。
您还可以在调试时(在断点处)按 ctrl+Alt+D 查看汇编代码。
这显然假设您在 x86 机器上获取 x86 程序集。
You can output the assembly code by clicking Project->properties->C++->Assembly output and then choose your preference, the assembly file will be created next time you build.
You can also view the assembly code while debugging(at a breakpoint) by pressing ctrl+Alt+D.
This obviously assumes you are on an x86 machine to get x86 assembly.
确保该文件是项目的一部分。转到项目属性 ->配置属性-> C/C++->输出文件,然后在“汇编器输出”下,选择除“无列表”之外的其他内容。然后,当您编译时,如果您仅指定程序集,您将获得一个 .asm 文件;如果您指定了列表文件,您将获得一个 .lst 文件。无论您选择哪个,都将保存文件中生成的汇编代码(不过,作为警告,您编写的部分的代码通常几乎被埋在标准库等的其他大杂烩之下。
Ensure that file is part of a project. Go to Project properties -> Configuration Properties -> C/C++ -> Output Files, and then under "Assembler output", select something other than "no listing". Then when you compile you'll get a .asm file if you specified assembly only, or a .lst file if you specified a listing file. Whichever you've selected will hold the generated assembly code from your file (though, as a warning, the code for the parts you wrote will often be almost buried under a mountain of other mishmash from standard libraries and such.