0
.data
  ENTRY(sys_call_table)
    .long SYMBOL_NAME(sys_ni_call)           /* 0 */
    .long SYMBOL_NAME(sys_exit)
    .long SYMBOL_NAME(sys_fork)
    ...
    .long SYMBOL_NAME(sys_vfork)             /* 190 */

我读了这个源代码。我在源代码中找不到.data.long定义。

4

1 回答 1

3

它们是汇编器指令——对汇编器的特殊指示,告诉它做一些不同的事情,而不是在编译的机器代码中插入处理器指令。

.data指令告诉汇编器在可执行文件部分的一个子部分的末尾发出以下指令data。通常,机器代码被发送到所谓text的可执行部分中,而诸如全局变量之类的非可执行数据存储在所谓的data部分之一中。不同的部分在运行时具有不同的内存权限,以及其他功能。

.long指令等效于.int指令,它只是说将文字数值插入机器代码。所以插入符号.long SYMBOL_NAME(sys_ni_call)位置的数值。sys_ni_call

因此,将这些放在一起,一个.data指令后跟一个.long指令会导致汇编器将特定的整数值放入data结果目标代码的一个部分中。这些值将是不可执行的,它们可能是只读的或可读写的,具体取决于sys_call_table该部分的子data部分的权限是如何配置的。

于 2013-06-08T04:31:25.890 回答