我正在写一个用户空间C程序来读取硬盘。
我需要把汇编程序指令转换成C程序代码。怎么能做到?

mov eax, [rsi+0x0C]

这里eax可以是任何变量。但是,rsi是值为0xc1617000的基址寄存器。此值不变。

最佳答案

可以为C中的指针赋值。请尝试以下操作:

uint8_t *rsi = (uint8_t*)(uintptr_t) 0xc1617000; // The uintptr_t cast isn't really needed, but might help portability.
uint32_t value = *(uint32_t *)(rsi + 0x0C);

当然,较短的版本是:
uint32_t value = *(uint32_t *)0xc161700C;

基本上,您将该常量解释为指向uint32_t的指针,然后取消对它的引用。

10-06 14:30