【发布时间】:2018-02-04 12:38:20
【问题描述】:
我的教授给我们分配了一个任务,让我们逐步执行由 c 程序使用 GDB 生成的 x86 指令来查找密码。我们的工作是经历 6 个阶段并找到隐藏在 x86 指令中某处的密码。我能够浏览所有这些,但最后我注意到在 x86 文件中,有一个名为 secret_phase 的函数。我的理解是,如果我们完成了 secret_phase,我们将获得额外的功劳。问题是,从未从主函数调用 secret_phase,所以我什至不知道如何访问它。有没有办法从 GDB 调用 secret_phase 函数?
【问题讨论】:
-
试试
call secret_phase() -
它告诉我 - 'secret_phase' 的返回类型未知;将调用转换为其声明的返回类型
-
在汇编器中调用就行了。
-
@MartinJames:您的“只是”假设 OP 知道如何将新代码链接到已链接的可执行文件中。他们没有目标文件。可行的一件事(考虑到可用工具的初学者知识)是将反汇编复制/粘贴到 asm 源文件中,然后重新组装 + 调用者。 (使用像
objconv这样的反汇编程序,它可以使您可以重新组装反汇编,并在分支目标上带有标签。)或者使用十六进制编辑器编辑二进制炸弹中的call指令之一,以调用secret_phrase而不是@987654326 @.