在程序启动时何时以及如何设置DS寄存器(elf / x86)

时间:2016-06-23 14:10:29

标签: assembly x86

我正在尝试反汇编一些经典程序,以了解它是如何工作的。我有时会看到类似的东西

  MOV DWORD PTR ds:0xXXXXXX, YYYYYh

其中XXXXXX是32位地址,YYYYY是32位值

但之前没有任何东西在ds寄存器中输入值。我看到调试器的值,但我不知道她来自哪里。

这条指令会做什么?

将YYYYY放在ds + 0xXXXXXX地址?

1 个答案:

答案 0 :(得分:4)

根据sysv ABI for i386 (PDF here, see page 3-29)的要求:

  

%CS,%DS,ES%,%SS

     

初始化段寄存器,以便用户进程可以   使用32位虚拟处理代码,数据和堆栈段   地址。改变其价值观的程序不符合   ABI并且具有未定义的行为。

Linux内核在启动程序时会在%ds中放置一个可用值。