使用C ++更改寄存器的值

时间:2016-01-03 03:44:21

标签: c++ assembly reverse-engineering

我试图使用C ++更改寄存器的整数值。

这就是我所拥有的......

DWORD_PTR* value_pointer= NULL;
__asm
{
    MOV [value_pointer], esp
}

// Create a pointer so we can modify the integer value stored in ESP, via value_pointer...
// We do +0x10 because the address is actually +0x10 ahead, I just couldn't compile the code using MOV [value_pointer], DWORD PTR SS:[ESP+0x10]
// Assume ESP+0x10 holds an integer value of 8
char* adjustable_value_pointer = ((char*)value_pointer + 0x10);

adjustable_value_pointer += 4;

现在,如果我们假设ESP + 0x10最初保持整数值为8,那么在此代码运行后再次引用ESP + 0x10(在汇编中)时,该值现在应为12,而不是8。

但这对我来说似乎不起作用......

请帮忙吗?!

1 个答案:

答案 0 :(得分:0)

value_pointer应该是DWORD_PTR而不是DWORD_PTR*,并且您不需要声明新指针,您可以使用{{1}的数组索引}作为基础(并根据步幅调整索引):

value_pointer

value_pointer[4] += 4; 4 s(0x16字节)的大小添加到DWORD,并访问该地址的内存。