小编ALe*_*evy的帖子

内存如何存储有符号和无符号字符

刚开始学C,感觉有点迷茫。

我有一些问题:

  1. 如果我有以下代码:
signed  char x = 56;
// ?In the RAM, I will see 00111000? yes/no?

signed char z = -56;
// In the RAM, I will see 11001000 yes/no?

unsigned char y = 200;
// ?In the RAM, I will see 11001000? yes/no?
Run Code Online (Sandbox Code Playgroud)
  1. 我有以下代码:
if (z<0){
   printf("0 is bigger then z ");
}
Run Code Online (Sandbox Code Playgroud)

编译后,汇编指令如何知道z是-56而不是200?(有符号和无符号的特殊ASM指令?)。

正如我在问题 1 中提到的,z 和 y 的值是 11001000,并且没有任何指示知道它是有符号还是无符号。

如果我没有找到正确的提问方式,请原谅,希望你理解我 谢谢

c assembly unsigned signed char

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

打印特定地址的字节

我有以下代码

intptr_t location = (intptr_t)GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")), "NtReadFile");
printf("addr-> %p\n", location);
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

0x00007FF9DE1FC120
Run Code Online (Sandbox Code Playgroud)

我使用 x64dbg/IDA 来查看“0x00007FF9DE1FC120”中的操作码

00007FF9DE1FC120 | 4C:8BD1                  | mov r10,rcx                             |
00007FF9DE1FC123 | B8 06000000              | mov eax,6                               |
00007FF9DE1FC128 | F60425 0803FE7F 01       | test byte ptr ds:[7FFE0308],1           |
00007FF9DE1FC130 | 75 03                    | jne ntdll.7FF9DE1FC135                  |
00007FF9DE1FC132 | 0F05                     | syscall                                 |
00007FF9DE1FC134 | C3                       | ret                                     |
00007FF9DE1FC135 | CD 2E                    | int 2E                                  |
00007FF9DE1FC137 | C3                       | ret                                     |
Run Code Online (Sandbox Code Playgroud)

我在打印位于 0x00007FF9DE1FC120 的 20 个字节时遇到问题。

    for …
Run Code Online (Sandbox Code Playgroud)

c c++ assembly

0
推荐指数
1
解决办法
82
查看次数

标签 统计

assembly ×2

c ×2

c++ ×1

char ×1

signed ×1

unsigned ×1