刚开始学C,感觉有点迷茫。
我有一些问题:
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)
if (z<0){
printf("0 is bigger then z ");
}
Run Code Online (Sandbox Code Playgroud)
编译后,汇编指令如何知道z是-56而不是200?(有符号和无符号的特殊ASM指令?)。
正如我在问题 1 中提到的,z 和 y 的值是 11001000,并且没有任何指示知道它是有符号还是无符号。
如果我没有找到正确的提问方式,请原谅,希望你理解我 谢谢
我有以下代码
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)