我有一个汇编程序,我试着理解它。 (我实际上是在描述它)。 是否有一个Linux工具/编辑器可以为我构建一点点? 显示循环/跳转的位置就足够了。 方便地描述教学的内容会很棒。
答案 0 :(得分:3)
如果您寻找类似于OllyDbg但针对Linux的内容,您可以尝试edb。
答案 1 :(得分:1)
由于您真的正在翻转高级语言进行性能分析,因此您可以做一些事情来帮助完成此过程。首先在C ++编译器和链接器中启用并保留调试信息(不要让它strip
可执行文件)。在g ++中,-g
命令行标志执行此操作。第二个许多C ++编译器具有输出立即汇编源代码的标志,而不是发出目标代码(由链接器使用)。在g ++中,-S
标志启用此功能。
可以将编译器中的程序集与oprofile反汇编中的程序集进行比较。
我对反编译器不是很熟悉,但是包含another SO post的两个反编译器对于C而言是Boomerang和REC,而不是C ++。
我希望有所帮助。
答案 2 :(得分:0)
你可以使用Asm plugin for Eclipse。
但是,通常IDE不用于汇编编程。我不确定通过轻松发现跳跃和循环的位置你会获得多少理解 - 无论如何你必须阅读所有内容。
答案 3 :(得分:0)
答案 4 :(得分:0)
不是真的,但你可以随时查看指令引用,使用语法高亮(vim asm语法),如果没有运行限制,你可以通过调试器。对于已经汇编的代码,这可能很有趣:LIDA
答案 5 :(得分:0)
仅适用于PowerPC CPU 项目Demono旨在恢复二进制代码的算法(目前仅用于PPC) - 并且它不是完全反编译器。项目正在建设中,但有些例子是有效的。 站点具有在线服务,用于从assebler生成类似C的函数描述: online service for decompile PPC asm
要使用它,您应该执行以下步骤:
例如,如果汇编程序有文本:
funct(){
0x00000002: cmpw r3, r4
0x00000003: ble label_1
0x00000004: mr r6, r3
0x00000005: b label_2
0x00000006: label_1:
0x00000007: mr r6, r4
0x00000008: label_2:
0x00000009: cmpw r6, r5
0x0000000A: ble label_3
0x0000000B: mr r7, r6
0x0000000C: b label_4
0x0000000D: label_3:
0x0000000E: mr r7, r5
0x0000000F: label_4:
0x00000010: mr r3, r7
0x00000011: blr
}
在线服务恢复遵循功能的算法描述:
funct(arg_w_0, arg_w_1, arg_w_2){
if(arg_w_0>arg_w_1?true?false){
arg_w_0=arg_w_1;
}else{
}
if(arg_w_0>arg_w_2?true?false){
arg_w_0=arg_w_2;
}else{
}
return (arg_w_0);
}
因此,funct()派生最多三个数字 - max3()。
可能,此服务可帮助您了解汇编程序指令的工作原理。