Там путь, но под Win98 & Win95. Под остальными, это имя исполнимаго ф-ла. Там есть еще одна особенность с кучами. Алгоритм для 9х и НТ различный. Если будут вопросы - обращайся.
Через PEB. Изучай его структуру. Можешь получить адрес PEB через NtQueryProcessInformation, и потом читать из АП этого процесса все нужные тебе данные.
PEB поизучал, вот что получилось. Но на первом ReadProcessMemory ошибка. Подскажите где грабли? Код (Text): .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\psapi.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\Psapi.lib includelib \masm32\lib\user32.lib PTOZWQUERYINFORMATIONPROCESS TYPEDEF PROTO :DWORD, : DWORD, : DWORD, : DWORD, : DWORD PZWQUERYINFORMATIONPROCESS TYPEDEF PTR PTOZWQUERYINFORMATIONPROCESS .data _PROCESSENTRY32 struct dwSize DWORD 0 cntUsage DWORD 0 th32ProcessID DWORD 0 th32DefaultHeapID DWORD 0 th32ModuleID DWORD 0 cntThreads DWORD 0 th32ParentProcessID DWORD 0 pcPriClassBase DWORD 0 dwFlags DWORD 0 szExeFile BYTE 260 dup (?) _PROCESSENTRY32 ends _PROCESS_BASIC_INFORMATION struct ExitStatus DWORD 0 PebBaseAddress DWORD 0 AffinityMask DWORD 0 BasePriority DWORD 0 UniqueProcessId DWORD 0 InheritedFromUniqueProcessId DWORD 0 _PROCESS_BASIC_INFORMATION ends _PEB struct InheritedAddressSpace DWORD 0 ReadImageFileExecOptions DWORD 0 BeingDebugged DWORD 0 SpareBool DWORD 0 Mutant DWORD 0 ImageBaseAddress DWORD 0 Ldr DWORD 0 ProcessParameters DWORD 0 SubSystemData DWORD 0 ProcessHeap DWORD 0 FastPebLock DWORD 0 AltThunkSListPtr DWORD 0 IFEOKey DWORD 0 Spare DWORD 0 _PEB ends _RTL_USER_PROCESS_PARAMETERS struct MaximumLength DWORD 0 sLength DWORD 0 Flags DWORD 0 DebugFlags DWORD 0 ConsoleHandle DWORD 0 ConsoleFlags DWORD 0 StandardInput DWORD 0 StandardOutput DWORD 0 StandardError DWORD 0 CurrentDirectory DWORD 0 DllPath DWORD 0 ImagePathName DWORD 0 CommandLine DWORD 0 Environment DWORD 0 StartingX DWORD 0 StartingY DWORD 0 CountX DWORD 0 CountY DWORD 0 CountCharsX DWORD 0 CountCharsY DWORD 0 FillAttribute DWORD 0 WindowFlags DWORD 0 ShowWindowFlags DWORD 0 WindowTitle DWORD 0 DesktopInfo DWORD 0 ShellInfo DWORD 0 RuntimeData DWORD 0 _RTL_USER_PROCESS_PARAMETERS ends _UNICODE_STRING struct sLength WORD 0 MaximumLength WORD 0 Buffer DWORD 0 _UNICODE_STRING ends uProcess _PROCESSENTRY32 <?> pbi _PROCESS_BASIC_INFORMATION <?> pPeb _PEB <?> uStr _UNICODE_STRING <?> RtlUserProcParams _RTL_USER_PROCESS_PARAMETERS <?> ZwQueryInformationProcess PZWQUERYINFORMATIONPROCESS ? sTitle db "Message", 0 Prog_name db "111.exe", 0 hSnapShot dd 0 BytesCount dd 0 hOpenProcess dd 0 wszBuffer db 260 dup (?) hModule dd ? szNtdll db "ntdll",0 szFuncName db "ZwQueryInformationProcess",0 .code start: invoke CreateToolhelp32Snapshot, 2h, 0 mov hSnapShot, eax mov uProcess.dwSize, sizeof PROCESSENTRY32 invoke Process32First, hSnapShot, addr uProcess invoke lstrcmpi, addr uProcess.szExeFile, addr Prog_name jz ok next1: invoke Process32Next, hSnapShot, addr uProcess invoke lstrcmpi, addr uProcess.szExeFile, addr Prog_name jnz next1 ok: invoke GetModuleHandle,offset szNtdll mov hModule,eax invoke GetProcAddress,eax,offset szFuncName mov ZwQueryInformationProcess,eax invoke MessageBox, NULL, addr uProcess.szExeFile, addr sTitle, MB_OK invoke OpenProcess, PROCESS_QUERY_INFORMATION, FALSE, uProcess.th32ProcessID mov hOpenProcess, eax invoke ZwQueryInformationProcess, hOpenProcess, 0, offset pbi, sizeof _PROCESS_BASIC_INFORMATION, 0 invoke ReadProcessMemory, hOpenProcess, pbi.PebBaseAddress, offset pPeb, sizeof _PEB, addr BytesCount invoke ReadProcessMemory, hOpenProcess, pPeb.ProcessParameters, offset RtlUserProcParams, sizeof _RTL_USER_PROCESS_PARAMETERS, BytesCount invoke ReadProcessMemory, hOpenProcess, RtlUserProcParams.ImagePathName, offset uStr, sizeof _UNICODE_STRING, BytesCount ;invoke ReadProcessMemory, hOpenProcess, RtlUserProcParams.ImagePathName.Buffer, wszBuffer, RtlUserProcParams.ImagePathName.sLength, BytesCount ;invoke MessageBox, NULL, addr RtlUserProcParams.ImagePathName, addr sTitle, MB_OK invoke CloseHandle, hOpenProcess invoke CloseHandle, hSnapShot invoke ExitProcess, NULL end start
Код (Text): invoke lstrcmpi, addr uProcess.szExeFile, addr Prog_name jz ok next1: invoke Process32Next, hSnapShot, addr uProcess invoke lstrcmpi, addr uProcess.szExeFile, addr Prog_name jnz next1 ok: а это что за бред? прежде чем выполнить условный прыжок нужно проверить условие, в зависимости от проверки установятся флаги
Asterix В верхней части проги все работает, просто запостил предыдущую версию. А проблема в ReadProcessMemory.
Код (Text): CurrentDirectory DWORD 0 DllPath DWORD 0 ImagePathName DWORD 0 CommandLine DWORD 0 WindowTitle DWORD 0 DesktopInfo DWORD 0 ShellInfo DWORD 0 CurrentDirectores DWORD 0 Это всё не DWORD'ы. CurrentDirectory это UNICODE_STRING и DWORD. CurrentDirectores это массив из 32х структур _RTL_DRIVE_LETTER_CURDIR. Остальное UNICODE_STRING.