X86 访问全局字符串模式

逆向工程 艾达 拆卸 x86
2021-07-02 23:02:02

在反转一些x86可执行文件时,我遇到了一种寻址全局变量的模式,我不熟悉,但它看起来像 IDA,我想了解更多。

.text:00002560             public start
.text:00002560             start proc near
.text:00002560 mov     ebx, [esp+0]
.text:00002563 ret          

.text:0001D233 push    ebx
.text:0001D234 call    start ; ebx is initialized here 
.text:0001D239 add     ebx, 1805Bh 

.text:0001D25A lea     edi, (aLsi_0 - 35294h)[ebx] ; "lsi" <---- Ida recognizes here an access to global string.

我在许多不同的二进制文件中看到了这种模式。有谁知道这种访问的名称是什么,我可以在哪里阅读更多相关信息?

2个回答

您(或 IDA)标记的start函数通常被调用__x86.get_pc_thunk.bx,GCC 和其他编译器使用它来计算位置无关代码(PIC)的当前执行地址通常,add调用后指令会ebx获取 GOT(全局偏移表)的值,以便无需额外设置即可完成外部调用(PIC 可执行文件中用于外部调用的 PLT 存根假设ebx指向 GOT),但也可以是全局的可以使用相对于 GOT 的固定偏移来寻址数据。这样,无论操作系统加载它的实际地址是什么(即它与位置无关),代码都可以运行。

我见过这样的代码,但那是很久以前的事了!它只与访问全局变量有关:通常称为全局偏移表。更多信息:https : //stackoverflow.com/questions/55587313/why-use-the-global-offset-table-for-symbols-defined-in-the-shared-library-itself