通过返回地址传递(字符串)参数?

逆向工程 拆卸 x86 BIOS
2021-06-10 22:52:22

我正在调试一个旧的 PC BIOS,它的大部分常量字符串直接穿插在代码中,如下所示:

在此处输入图片说明

正如注释所指出的,该函数putsc将字符串作为其参数,通过返回地址找到它!在遍历字符串之后,它实际上修补了堆栈以进行正确的返回。

在此处输入图片说明

我的问题,我希望它不是太模糊:

是否或正在传递这样的常量参数,在调用后立即粘贴它们,以任何方式用于诸如此类的低级(手写?)代码的常用技术?

为什么您甚至更喜欢这样做而不是在其他地方使用字符串表?

1个回答

这种技术允许代码与位置无关,因为没有对保存字符串的特定地址的显式引用。取而代之的是,无论当前地址是什么,调用指令都会压入堆栈。根据用于生成代码的汇编程序(如果有),这可能会简化一些事情。如果代码完全是通过输入十六进制值手工制作的,那么位置无关性允许插入其他指令而无需重新计算地址。