小编Cra*_*tey的帖子

为什么.rodata节中的静态字符串在GCC中有一个四点前缀?

对于以下代码:

#include <stdio.h>

int main() {
    printf("Hello World");
    printf("Hello World1");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

生成的用于调用printf的程序集如下(64位):

  400474:   be 24 06 40 00          mov    esi,0x400624
  400479:   bf 01 00 00 00          mov    edi,0x1
  40047e:   31 c0                   xor    eax,eax
  400480:   e8 db ff ff ff          call   400460 <__printf_chk@plt>
  400485:   be 30 06 40 00          mov    esi,0x400630
  40048a:   bf 01 00 00 00          mov    edi,0x1
  40048f:   31 c0                   xor    eax,eax
  400491:   e8 ca ff ff ff          call   400460 <__printf_chk@plt>
Run Code Online (Sandbox Code Playgroud)

而.rodata部分如下:

Contents of section .rodata:
 400620 …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc

3
推荐指数
1
解决办法
180
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1