assembly 什么是< close>和gs:在汇编中?

1bqhqjot  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(168)

在这个screenshot中,我可以看到下面的反汇编代码:

...
mov eax, gs:0x14
...
call 0x8058210 <close>
...

<close>在这里做什么?
什么是gs:
谢谢你的帮忙

jgzswidk

jgzswidk1#

这里的<close>是什么意思?
它仅仅是地址0x8058210(由call指令调用的函数的地址)是函数close的地址的信息:
这意味着指令call 0x8058210调用函数close()
什么是gs:
在16位和32位x86 CPU上,每当访问内存时,都会使用所谓的“选择器”。
简单地说,这些“选择器”指定要访问的存储区。寄存器csdsesfsgsss保存“选择器”值,因此指定了存储区。
默认情况下,指令mov eax, [0x14]将访问ds寄存器指定的内存区域中的地址0x14gs:表示不访问ds寄存器指定的内存区域,而是访问gs寄存器指定的内存区域。
(By顺便说一句:我希望指令显示为mov eax, [gs:0x14]mov eax, gs:[0x14]。)
与16位x86操作系统不同,大多数(但不是全部)32位操作系统将所有代码和数据存储在同一内存区域中。
因此,在这类操作系统的代码中,通常看不到类似mov ax, ss:[ebp-0x10]的指令。
然而,许多操作系统使用一个或两个额外的内存区域(由寄存器fs和/或gs指定)。
在Linux下,由gs指定的内存区域保存所谓的线程本地存储。

相关问题