为什么我的绕道代码,崩溃与NOP
Why is my detoured code, crashing with a NOP
你好,这是我的第一个问题,所以请对我温柔一点。我正在绕道一个exe,使用MS绕道和Visual Studio 2005,我的dll被加载,我的钩子工作很好,但是当我试图扩展我的钩子代码时,有些东西出错了,整个事情崩溃了,我认为它在exe中创建了一个异常,它弹出一个消息框联系支持。
typedef void (__stdcall* GenterateStrings)(int,int,int);
GenterateStrings Real_GenterateStrings = (GenterateStrings)(0x06EDFA0);
extern "C" { static void __stdcall myGenterateStrings(int,int,int); }
void __stdcall myGenterateStrings(int a1, int a2, int a3)
{
myLogMessage(L"its working");
Real_GenterateStrings( a1, a2, a3);
return;
}
这是一个处理没有异常,我的日志文件充满了"它的工作",但是,我需要捕获我的Real_GenterateStrings()调用后的EAX,因为它包含一个指向unicode字符串的指针。
,但如果我把任何代码后Real_GenterateStrings调用只是导致崩溃一旦它的钩。即使只是一个nop
void __stdcall PokerAdvisorGenterateStrings(int a1, int a2, int a3)
{
myLogMessage(L"its working");
Real_GenterateStrings( a1, a2, a3);
__asm
{
nop
}
return;
}
任何想法?
我要挂接的函数是
mov eax, [rsp+0Ch]
mov ecx, [rsp+8]
mov edx, cs:113650Ah
push rax
mov eax, [rsp+8]
push rcx
push rdx
push 0A3CA2Ch
push rax
call near ptr unk_6AB8E0
add esp, 14h
retn
我不认为它返回一个值?
你怎么知道eax
里面有东西?
一般来说,绕道崩溃通常是由于不准确的调用约定和/或原型造成的。我怀疑绕道的函数返回一个void*或其他东西。您需要捕获返回值,并在完成后将其传递给调用者,如下所示:
typedef void* (__stdcall* GenterateStrings)(int,int,int);
GenterateStrings Real_GenterateStrings = (GenterateStrings)(0x06EDFA0);
extern "C" { static void __stdcall myGenterateStrings(int,int,int); }
void* __stdcall myGenterateStrings(int a1, int a2, int a3)
{
myLogMessage(L"its working");
void* ret = Real_GenterateStrings( a1, a2, a3);
__asm
{
nop
}
return ret;
}
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 为什么我的绕道代码,崩溃与NOP