Попробуйте дезассемблировать функцию GetLastError из kernel32.dll найдете много интересного... И никогда бы не подумал что в XP такой kernel32 (да на самом деле вызывается ... из ...) Код (Text): GetLastError: 7C80903D| 4E dec esi 7C80903E: 54 push esp 7C80903F: 44 inc esp 7C809040: 4C dec esp 7C809041: 4C dec esp 7C809042: 2E cs: 7C809043: 52 push edx 7C809044: 746C je .07C8090B2 --↓1 7C809046: 47 inc edi 7C809047: 65 gs: 7C809048: 744C je .07C809096 --↓2 7C80904A: 61 popad 7C80904B: 7374 jae .07C8090C1 --↓3 7C80904D: 57 push edi 7C80904E: 696E3332457272 imul ebp,d,[esi][33],072724532 7C809055: 6F outsd 7C809056: 7200 jb .07C809058 --↓4 7C809058| 4E 4dec esi
хех, W32Dasm пишет, что нельзя найти экспортируемую ф-ию! завтра на иде проверю ЗЫ: а приведённая простыня чем получена?
... Win32GetLastError из нтдлл на сколько помню. Да и сама функция 3 или 4 строчки. Вопрос только в том, что здесь удивительного
PROFi GetLastError db 'NTDLL.RtlGetLastWin32Error',0 Если это перевести в байты то и получишь то что у тебя в листинге.
Гм старость не радость. RtlGetLastWin32Error Код (Text): MOV EAX,DWORD PTR FS:[18] MOV EAX,DWORD PTR DS:[EAX+34] RETN xp sp2
asd В том что в ntdll.dll она назывется _RtlGetLastError а в приложении (exe шнике) она импортируется из kernel32.dll т.е. происходит подстановка вместо GetLastError _RtlGetLastError. Вопрос в том что в Си происходит замена функций еще на стадии компиляции, а здесь замена идет в уже откомпилированном приложении. Ктати как по вашему GetProcAddress какой адрес выдаст? ведь мы ее вызываем для модуля kernel32 и ни как не для ntdll
PROFi Читать про редирект(как же оно по научному называется?) при экспорте. Она не одна такая. GetProcAddress выдаст адрес из ntdll
asd Про редирект читал, но сдесь немного другая технология function forwarder. #pragma comment(linker, "/export:SomeFnk=Otherdll.OtherFunc") А как в исходной библиотеке это размешено - это было для меня открытие.
Да нет, она самая. М.б. я её только назвал не так. Адрес GetLastError указывает на строку NTDLL.RtlGetLastWin32Error и находится в пределах Export Directory. тот кто определяет адрес GetLastError увидив, что адрес указывает внутрь Export Directory должен взять имя новой библиотеки и функции и искать там.