这个问题是由英特尔x86组装专家回答的。谢谢你的努力,提前!
问题规格
我正在分析一个二进制文件,它与Mach-O 64位x86程序集匹配.我目前正在使用MacOS 64操作系统。程序集来自objdump。
问题是,当我学习程序集时,我可以看到变量名"$xxx",我可以看到ascii中的字符串值,也可以看到被调用的名称,比如“调用_printf”。
但在这个集会上,我无法得到上面的任何东西:
我也是AT&T装配公司的新手。因此,你能否告诉我,指导的含义是什么?
0000000100000c90 pushq %rbp
0000000100000c98 leaq 0x2bf(%rip), %rdi ## literal pool for: "xxxx\n"
...
0000000100000cd0 callq 0x100000c90这是一个循环吗?我不确定,但似乎是这样。以及为什么我们使用%rip和%rdi注册。在英特尔x86中,我知道EIP代表当前的呼叫者地址,但我不明白这里的含义。
但是,在这个文件中没有出现ascii字符串!
因为它可能是病毒,我不能执行它。我该怎么分析呢?
5月21日最新情况
我已经确定了输出在哪里,如果我完全理解这个方案中所代表的数据流管道,我可能会找到可能的解决方案。
如果有人能给我详细的解释,我将不胜感激。谢谢!
5月22日最新情况
我在MacOS中安装了一个VirtualBox,在chmod特权之后,我执行了这个程序,但是除了两行输出之外,没有什么特别之处。结果隐藏在二进制文件中。
发布于 2017-05-20 15:51:48
main。二进制头包含入口点地址。call 616没有什么特别之处,只是你没有(所有)符号。有些奇怪的是,objdump没有为您计算地址,但应该是0x100000ca6+616。https://stackoverflow.com/questions/44086488
复制相似问题