不修改aop, 用静态 tls回调在线程初始化时做一些事
* 线程启动前会先初始化tls结构 , 依次调用tls回调数组
1.在全局变量定义一个 IMAGE_TLS_DIRECTORY 变量 模拟tls结构
2.在回调部分放上自己的函数
3.修改数据目录tls的位置, 指向自己的结构
模拟tls 的C代码:
tls回调函数跟dllentry 参数一样
tls结构的第4个参数是一个回调数组, 依次调用
前3个参数在这里没用 , 具体参考msdn
#include <iostream>
#include <windows.h>
using std::cout;
using std::endl;
char msg[] = "fuckme";
//回调1
void tls_cb(void *handle, DWORD r, void *re) {
MessageBoxA(0, msg, 0, MB_OK);
}
//回调2
void tls_cb2(void *handle, DWORD r, void *re) {
MessageBoxA(0, 0, msg, MB_OK);
}
DWORD xx = 0;
//回调数组
DWORD tls_cb_arr[3] = { (DWORD)&tls_cb,(DWORD)&tls_cb2,0 };
//自定义tls结构
IMAGE_TLS_DIRECTORY tls = { (DWORD)&xx,(DWORD)&xx,(DWORD)&xx,(DWORD)tls_cb_arr,0,0 };
int main()
{
MessageBoxA(0,0,0,MB_OKCANCEL);
return 0;
}
根据自己机器查找 .data 段