【发布时间】:2016-04-07 00:01:45
【问题描述】:
我正在尝试使用 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。
但这似乎对我不起作用......
请帮忙?!
【问题讨论】:
-
您似乎在修改指针,而不是引用的值。这是预期的行为吗?
-
我要修改ESP+0x10中存储的原始值
-
在
((char*)value_pointer + 0x10;你有不匹配的括号,所以代码甚至不应该编译。此外,在adjustable_value_pointer += 4;中,您正在调整指针的值,而不是被指向的东西(正如@owacoder 所指出的那样)。 -
你用的是什么编译器?
-
你怎么确定编译器相对于
esp放置了一些东西?
标签: c++ assembly reverse-engineering