小编Nod*_*aju的帖子

如何将0xFF存储到C中的char?

声明数组后,如何存储以下格式的内容:“ 0xff”到char数组。我将在下面说明我的意思。

当编写这样的代码时,可以正常工作:

 int main (void){
       unsigned char array[] = {0xff,0xa4};
       return 0;
 }
Run Code Online (Sandbox Code Playgroud)

但是,我需要稍微复杂一点。在声明完数组后,我需要给它分配诸如0xff之类的东西。我如何才能使其工作并获得与上述代码完全相同的结果?使用下面的代码,我不断收到错误“ multi-character character constant [-Wmultichar]”和“ large integer implicitly truncated to unsigned type [-Woverflow]”。

int main(void){
      unsigned char array[2];
      array[0] = '0xff';
      array[1] = '0xa4';
      return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays int hex gcc

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

继续获取 e8 00 00 00 00 作为机器代码以在汇编中调用函数

我知道objdump -dr在我的文件call中使用时会出现在机器代码中,e8 00 00 00 00因为它尚未链接。但是我需要找出00 00 00 00链接器完成它的工作后会变成什么。我知道它应该计算偏移量,但我对此有点困惑。

以下面的代码为例,链接器部分完成后,应该如何e8 00 00 00 00?我如何得到这个答案?

我正在使用此示例代码进行测试:(我正在尝试调用 moo)

Disassembly of section .text:

0000000000000000 <foo>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   89 7d fc                mov    %edi,-0x4(%rbp)
   7:   8b 45 fc                mov    -0x4(%rbp),%eax
   a:   83 e8 0a                sub    $0xa,%eax
   d:   5d                      pop    %rbp
   e:   c3                      retq   

000000000000000f <moo>:
   f:   55                      push   %rbp
  10:   48 89 e5                mov    %rsp,%rbp
  13: …
Run Code Online (Sandbox Code Playgroud)

x86 assembly linker machine-code disassembly

2
推荐指数
1
解决办法
873
查看次数

标签 统计

arrays ×1

assembly ×1

c ×1

disassembly ×1

gcc ×1

hex ×1

int ×1

linker ×1

machine-code ×1

x86 ×1