Почему же? ebp указывает на стек. Проведя эту операцию, я лишь получу указатель на указатель на IMAGE_IMPORT_DESCRIPTOR, а мне нужен просто указатель, тем-более проблем с этим кодом нет
1 replace_function: ; stdcall
2 push ebp
3 mov ebp, esp
4
5 sub esp, 16 ; base handle - 4, size of IMAGE_IMPORT_DESCRIPTOR - 8,
6 ; PIMAGE_IMPORT_DESCRIPTOR - 12, PIMAGE_THUNK_DATA - 16
7
8 push 0
9 call _GetModuleHandleA@4
10 test eax, eax
11 jz .end
12
13 mov [ebp - 4], eax
14 mov ebx, [ebp - 8]
15
16 push ebx
17 push IMAGE_DIRECTORY_ENTRY_IMPORT
18 push TRUE
19 push eax
20 call _ImageDirectoryEntryToData@16
// -1 <=> a < b, 0 <=> a == b, 1 <=> a > b
int cmp(T a, T b)
{
T top;
if (a == b)
return 0;
top = ((T)1) << (sizeof(T) * 8 - 1 - clz(a ^ b));
n = popcnt(a & (-top << 1));
if (n & 1)
return (a & top) ? -1 : 1;
else
return (a & top) ? 1 : -1;
}
bootstrapping - тема тонкая
ресурсы, где можно подробней об этом почитать?
memset(&usr, 0, sizeof(user_t));
.user_t usr = {0};