не знаю, но у меня RIP=0 на входе и сразу падает: Код (Text): 0:000> g (1cf0.117c): Access violation - code c0000005 (first chance) 00000000`00000000 ?? ??? 0:000> r rax=00000000c0000135 rbx=0000000000000076 rcx=0000000000000000 rdx=0000000000400309 rsi=00000000772b9c1e rdi=000000000000070e rip=0000000000000000 rsp=000000000013fef8 rbp=000000000013ff50 r8=0000000000400317 r9=0000000000000000 r10=0000000000000000 r11=000000000013fe72 r12=00000000772b4358 r13=00000000772b6264 r14=00000000771a0000 r15=0000000000000000 iopl=0 nv up ei pl zr na po nc cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246 Может у тебя обновы не установлены или ещё чё.. Более того, если стек не выровнен на 16-байт границу, у меня падает любой софт (который я сам пишу) при вызове апи, а у тебя как-раз RSP=13fef8. Ну кратность размеров секции вроде отрабатывало раньше у меня норм, хотя у тебя стоят 10:10 байт в пе-хидере: Код (Text): 0:000> !dh image00000000`00400000 File Type: EXECUTABLE IMAGE FILE HEADER VALUES 8664 machine (X64) 1 number of sections 67BD0A50 time date stamp Tue Feb 25 05:09:52 2025 0 file pointer to symbol table 0 number of symbols F0 size of optional header 3 characteristics Relocations stripped Executable OPTIONAL HEADER VALUES 20B magic # 14.40 linker version 180 size of code 0 size of initialized data 0 size of uninitialized data 1E0 address of entry point 1C0 base of code ----- new ----- 0000000000400000 image base 10 section alignment <------+-------// 10 file alignment <------+ 2 subsystem (Windows GUI) 6.00 operating system version 0.00 image version 6.00 subsystem version 340 size of image 1C0 size of headers 0 checksum <------------- На эту хрень тоже ругается WinDbg 0000000000100000 size of stack reserve 0000000000001000 size of stack commit 0000000000100000 size of heap reserve 0000000000001000 size of heap commit 8100 DLL characteristics NX compatible Terminal server aware 0 [ 0] address [size] of Export Directory 0 [ 0] address [size] of Import Directory 0 [ 0] address [size] of Resource Directory 0 [ 0] address [size] of Exception Directory 0 [ 0] address [size] of Security Directory 0 [ 0] address [size] of Base Relocation Directory 0 [ 0] address [size] of Debug Directory 0 [ 0] address [size] of Description Directory 0 [ 0] address [size] of Special Directory 0 [ 0] address [size] of Thread Storage Directory 0 [ 0] address [size] of Load Configuration Directory 0 [ 0] address [size] of Bound Import Directory 0 [ 0] address [size] of Import Address Table Directory 0 [ 0] address [size] of Delay Import Directory 0 [ 0] address [size] of COR20 Header Directory 0 [ 0] address [size] of Reserved Directory SECTION HEADER #1 .text name 171 virtual size 1C0 virtual address 180 size of raw data 1C0 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 80000020 flags Code (no align specified) Write Only
Marylin, я сам не ожидал, сколько мелочей придется учитывать при запуске крохотной программы, но всё равно всем принявшим участие огромное спасибо! Если кто-то хочет дорабатывать все листинги прикладывались... так что welcome!
Это FASM?!! Может лучше использовать UASM и его подвиды, либо старый добрый, но туповатый и проприетарный MASM? У меня таких проблем нету, я сначала фасм хотел использовать, ну изучить его, но потом посоветовали UASM, и я понял что фасм мне просто не нужен, UASM может всё то же что и фасм.
Вот я тоже собрал, не трогая пе формат. Зачем принудительно завершать процесс, а не по рет я так и не понял.
Ahimov, у меня этот семпл проваливается в чёрную дыру, хотя в отладчике(g) доходит до ret. Код (Text): CommandLine: F:\t.exe Symbol search path is: srv*c:\Symbols*http://msdl.microsoft.com/download/symbols Executable search path is: ModLoad: 00000001`3ff00000 00000001`3ff05000 image00000001`3ff00000 ModLoad: 00000000`771a0000 00000000`7733f000 ntdll.dll ModLoad: 00000000`76f80000 00000000`7709f000 C:\Windows\system32\kernel32.dll ModLoad: 000007fe`fcdc0000 000007fe`fce27000 C:\Windows\system32\KERNELBASE.dll (1ec4.1c80): Break instruction exception - code 80000003 (first chance) ntdll!LdrpDoDebuggerBreak+0x30: 00000000`77245c90 cc int 3 0:000> bp @$exentry *** WARNING: Unable to verify checksum for image00000001`3ff00000 0:000> g Breakpoint 0 hit image00000001_3ff00000+0x1074: 00000001`3ff01074 488bec mov rbp,rsp 0:000> g ntdll!ZwTerminateProcess+0xa: 00000000`77208d8a c3 ret Mikl___, на семёрке systeminfo в ком.строке сколько обновлений показывает? интересно, в чём разница наших Win7, то у тебя код работает, а у меня нет? Код (Text): C:\> systeminfo Название ОС: Microsoft Windows 7 Профессиональная Версия ОС: 6.1.7601 Service Pack 1 сборка 7601 Параметры ОС: Изолированная рабочая станция Код продукта: 00371-868-0000007-85883 Тип системы: x64-based PC Исправление(я): Число установленных исправлений - 69. <------------// [01]: KB2849697 [02]: KB2849697 [03]: KB2849696 .......... --- Сообщение объединено, 25 фев 2025 --- Ahimov, я особо не разбирался в исходнике, но чёто не видно, где при поиске пропускаются функции только с ординалом - у меня их 8 в самом начале экспорта Ntdll
Ahimov, можно и меньше но работать будет только на Win10 (у меня нет Win7, а устанавливать лень) Вас это устроит?
Собрал справку по формату. Это для 32, пока нет 64 системы. Ему нужна спецификация на формат, сурки создания секции и дизасм MiCreateSection().
вот этот фрагмент кода Код (ASM): mov rax,[rax+18h];Смещаемся к структуре PEB_LDR_DATA то есть получается что первые два поля структуры PEB 8 байт,далее идёт поле 8 байт,то есть 16+8 = 18h (в десятичной 24),в файле winternl.h,размеры полей отличается
Смещения разные для PEB32 и PEB64. Более того х64 структуры отличаются ещё и для Win7/10/11, правда обычно новые поля добавляются в конец, но не всегда. Ищи разницу здесь: https://www.vergiliusproject.com/kernels/x64 Так выглядит обход PEB_LDR на моей Win7_x64 в отладчике WinDbg: Код (Text): 0: kd> dt _peb 7fffffd4000 nt!_PEB +0x000 InheritedAddressSpace : 0 '' +0x001 ReadImageFileExecOptions : 0 '' +0x002 BeingDebugged : 0 '' +0x003 BitField : 0x8 '' +0x008 Mutant : 0xffffffff`ffffffff Void +0x010 ImageBaseAddress : 0x00000001`3fef0000 Void +0x018 Ldr : 0x00000000`77d32e40 _PEB_LDR_DATA --+ ........ | | 0: kd> dt _PEB_LDR_DATA 0x00000000`77d32e40 <---------------------------+ nt!_PEB_LDR_DATA +0x000 Length : 0x58 +0x004 Initialized : 0x1 '' +0x008 SsHandle : (null) +0x010 InLoadOrderModuleList : _LIST_ENTRY [ 0x00000000`00362a10 - 0x17de81b0 ] ---+ +0x020 InMemoryOrderModuleList : _LIST_ENTRY [ 0x00000000`00362a20 - 0x17de81c0 ] | +0x030 InInitOrderModuleList : _LIST_ENTRY [ 0x00000000`00362b20 - 0x17de81d0 ] | +0x040 EntryInProgress : (null) | +0x048 ShutdownInProgress : 0 '' | +0x050 ShutdownThreadId : (null) | | 0: kd> dt _LDR_DATA_TABLE_ENTRY 0x00000000`00362a10 <---------------------------------+ nt!_LDR_DATA_TABLE_ENTRY +0x000 InLoadOrderLinks : _LIST_ENTRY [ 0x00000000`00362b00 - 0x77d32e50 ] ------> Ntdll.dll +0x010 InMemoryOrderLinks : _LIST_ENTRY [ 0x00000000`00362b10 - 0x77d32e60 ] +0x020 InInitOrderLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x0 ] +0x030 DllBase : 0x00000001`3fef0000 Void +0x038 EntryPoint : 0x00000001`45976d20 Void +0x040 SizeOfImage : 0xe08d000 +0x048 FullDllName : _UNICODE_STRING "C:\Users\AppData\Roaming\Telegram Desktop\Telegram.exe" +0x058 BaseDllName : _UNICODE_STRING "Telegram.exe" +0x068 Flags : 0x4000 +0x06c LoadCount : 0xffff +0x06e TlsIndex : 0xffff +0x070 HashLinks : _LIST_ENTRY [ 0x00000000`003a45a0 - 0x77d2b350 ] +0x078 CheckSum : 0x77d2b350 +0x080 TimeDateStamp : 0x6a704366 +0x088 EntryPointActivation : (null) +0x090 PatchInformation : (null) +0x098 ForwarderLinks : _LIST_ENTRY [ 0x00000000`00362aa8 - 0x362aa8 ] +0x0a8 ServiceTagLinks : _LIST_ENTRY [ 0x00000000`00362ab8 - 0x362ab8 ] +0x0b8 StaticLinks : _LIST_ENTRY [ 0x00000000`003a22c0 - 0x3a2200 ] +0x0c8 ContextInformation : 0x00000000`77c02d24 Void +0x0d0 OriginalBase : 0 +0x0d8 LoadTime : 0 0: kd> dt _LDR_DATA_TABLE_ENTRY 0x00000000`00362b00 nt!_LDR_DATA_TABLE_ENTRY +0x000 InLoadOrderLinks : _LIST_ENTRY [ 0x00000000`00364530 - 0x362a10 ] ------> Kernel32.dll +0x010 InMemoryOrderLinks : _LIST_ENTRY [ 0x00000000`00364540 - 0x362a20 ] +0x020 InInitOrderLinks : _LIST_ENTRY [ 0x00000000`003646c0 - 0x77d32e70 ] +0x030 DllBase : 0x00000000`77c00000 Void +0x038 EntryPoint : (null) +0x040 SizeOfImage : 0x19f000 +0x048 FullDllName : _UNICODE_STRING "C:\Windows\SYSTEM32\ntdll.dll" +0x058 BaseDllName : _UNICODE_STRING "ntdll.dll" +0x068 Flags : 0x4004 +0x06c LoadCount : 0xffff +0x06e TlsIndex : 0 +0x070 HashLinks : _LIST_ENTRY [ 0x00000000`003a3e20 - 0x77d2b2e0 ] +0x078 CheckSum : 0x77d2b2e0 +0x080 TimeDateStamp : 0x5e0eb67f +0x088 EntryPointActivation : (null) +0x090 PatchInformation : (null) +0x098 ForwarderLinks : _LIST_ENTRY [ 0x00000000`00362b98 - 0x362b98 ] +0x0a8 ServiceTagLinks : _LIST_ENTRY [ 0x00000000`00362ba8 - 0x362ba8 ] +0x0b8 StaticLinks : _LIST_ENTRY [ 0x00000000`00362bb8 - 0x362bb8 ] +0x0c8 ContextInformation : (null) +0x0d0 OriginalBase : 0x78e50000 +0x0d8 LoadTime : 0x0 0: kd>