反汇编中的硬编码地址
hardcoded address in disassembly
我正在用C++编写优化的基于Windows的外壳代码,在将其传递给函数时,我遇到了在C++中避免硬编码地址的问题。
例如:
My_CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&thread_callback, NULL, NULL, NULL);
DWORD WINAPI thread_callback(LPVOID lpParam)
{
// stuff..
}
在反汇编中,它显示CreateThread(…,cardcoded_address,..);相反,我想像"从这个位置到线程回调"一样传递这个地址
有什么办法可以避免吗?(因为外壳代码应该与地址无关?)
谨致问候。
无论如何,我一直在搜索/做一些事情,我能做的最后一件事是,你可以用delta偏移量来解决这个问题。
说明:在代码的第一个函数处,应该有这样的函数:
DWORD delta;
__asm {
call GetBasePointer
GetBasePointer:
pop eax
sub eax, GetBasePointer
mov [delta], eax
}
您也可以在谷歌上搜索delta偏移量以获取更多详细信息。之后,你可以做这样的事情:
My_CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)((DWORD)thread_callback + (DWORD)delta), NULL, NULL, NULL);
DWORD WINAPI thread_callback(LPVOID lpParam)
{
// stuff..
}
它会很好地工作,
谨致问候。
相关文章:
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- 如何确定我已使用非编码文件到达 EOF?
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在c++程序中找到函数的地址
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 内联程序集printf将整数解释为地址
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 为什么指针不写入类的地址?
- 如何在C++中获取该对象的类声明中对象的地址?
- 通过按地址访问变量
- 在卡萨布兰卡形成编码参数的列表
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 函数名是c中该函数的第一条指令的地址吗
- 反汇编中的硬编码地址
- 获取c++中硬编码内存地址的内容