【发布时间】:2017-05-04 03:48:12
【问题描述】:
我正在尝试在 C 中复制 x86 mov 指令,例如 mov %ecx,-0x4(%ebp) 并且对如何执行感到困惑。我有一个用于寄存器的 int 数组和一个 int 位移。如何将 %ecx 的值移动到比 %ebp 中存储的值小 4 的内存地址?
我有:
int* destAddress=(int*)(displacement + registers[destination]);
*destAddress=registers[source];
我收到警告:从不同大小的整数转换为指针。
【问题讨论】:
-
你怎么知道
destAddress是一个有效的地址?假设displacement是-4而registers[destination]是某个地址。你怎么知道这个结果地址是被分配的,而不是随机的? -
要回答您的问题,您将
int转换为int*,这似乎是一个问题(当然是未定义的行为)。如果你在 X86_64 上,你应该考虑为displacement输入size_t和为registers输入unsigned long long。 -
我不确定我是否理解代码示例或您想要做什么...?结果应该存储在哪里?初始值是多少?你想做什么:
registers[destination] = registers[source] + displacement?指针有什么用?它应该指向什么?