mov esi,offset buffer
movzx edx,WORD PTR [esi]
cmp edx,'ZM'
jnz @@invalid_file
mov edx,(IMAGE_DOS_HEADER PTR [esi]).e_lfanew
cmp DWORD PTR [esi+edx],'EP'
jnz @@invalid_file
Вопрос по API
invoke GetCurrentDirectory,40,ADDR Catalog
invoke GetFileSizeEx, Sustem(что здесь указать путь к файлу это понятно),В книге пишется что тут указывают на структуру LARGE_INTEGER для сохранения размера файла так где или как получить размер. Про структуру ничего непонятно там всего в 5 словах.
invoke WriteFile,Путь к файлу, Переменная для записи тоже понятно,?,?,?
И как скопировать в буфер например не 1 строчку а 10.
Какой Api или Macro можно слаживать данные в буфере Catalog и Bufer
C Macro вообще толком нечего непонятно
Такая же проблема и с ReadFile
Invoke GetCursorPos,Позиция курсора, сюда переменная нужна или ???.
Invoke EnableMenuItem,дескриптор меню де его взять ,IDB_EXIT,MF_DISABLE
Ааагромное Спасибо!
invoke CreateFile,addr file,GENERIC_READ or GENERIC_WRITE,\
NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
cmp eax,INVALID_HANDLE_VALUE
je _re
mov fileh,eax
invoke ReadFile,fileh,addr bufer,files,addr fileb,NULL
cmp eax,0
je _re
cmp word ptr bufer[0B0h],04550h
je _pe
jmp _exit
_pe:
invoke MessageBeep,1
jmp _exit
_re:
invoke MessageBox,NULL,NULL,NULL,MB_ICONERROR or MB_OK
_exit:
invoke CloseHandle,fileh
Заранее спасибо.
вот что было...[/QUOTE]
Может тогда и ссылку на нужные *.lib и *.h дашь?
[QUOTE=ШпиЁн]:-)))) половина функций недокументирована ;) На английском языке у меня
Может тогда и ссылку на нужные *.lib и *.h дашь?
invoke CreateFile,addr file,GENERIC_READ or GENERIC_WRITE,\
NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
cmp eax,INVALID_HANDLE_VALUE
je _re
mov fileh,eax
invoke ReadFile,fileh,addr bufer,files,addr fileb,NULL
cmp eax,0
je _re
cmp word ptr bufer[0B0h],04550h
je _pe
jmp _exit
_pe:
invoke MessageBeep,1
jmp _exit
_re:
invoke MessageBox,NULL,NULL,NULL,MB_ICONERROR or MB_OK
_exit:
invoke CloseHandle,fileh
Заранее спасибо.[/quote]
IMAGE_DOS_HEADER.e_lfanew содержит смещение структуры IMAGE_NT_HEADERS от начала файла.
А поточнее можно как на ASM оформить
Код:
Эти функции есть в DDK, либо их нужно получать через GetProcAddress и т.д.
архиве лежат списки всех библиотек если что пишите скину а то всё сразу много весит да вроде есть NTDLL.lib
У меня есть DDK 2600.1106 здесь в
имеется переменная в неё записываю данные
...
bufer dd ?
...
invoke ReadFile,filehandle,addr bufer,filesize,addr filebytez,NULL
в eax=0 то есть ошибка
...
а если так
...
bufer dd 10000 dup (?)
...
invoke ReadFile,filehandle,addr bufer,filesize,addr filebytez,NULL
...
а так всё нормально но при этом прога весит на 10 kb больше почему там переменная неувеличивается сама
а выдаёт ошибку.
Заранее спасибо
обычно читают в буфер, а не в переменную :-)))
bufer dd ? я точно несзнаю это буфер или что как в буфер писать
invoke MapViewOfFile,filemaphandle,FILE_MAP_ALL_ACCESS,0,0,0
но она мне ненравиться асобо нельзя просматреть записанные данные они обычно по адрессу 00800000 а WINDASM непоказывает
invoke ReadFile,filehandle, addr bufer, 4096, addr filebytez, NULL
мы читаем 4 Кб из файла, в filebytez будет число прочитанных байт.
или проще использовать проекцию MapViewOfFile но я незнаю как записывать или читать если есть пример то буду весьма рад помощи
Ты выделяешь память статически, можно динамически - сколько надо столько и отмерил(потом нужно ее освободить) - в Си можно использовать malloc и т.д.
P.S. асм - вещь хорошая(к несчастью я его мало знаю), но начинать изучение программирования с него я не рекомендую. Си рулит :-)))
А я начинал с Бэйсика потом турбо паскаль, Delphi, ну и ASM а диск с СИ мне по почте через инет идёт уууу =( и наверно непредёт а так у нас его непросто, достать проще через инет. А где можно почитать " статически, можно динамически " подскажи пожалуйста.
Если ты хочешь, чтобы твои переменные были проинициализированы, то эти переменные должны быть объявлены в контексте директивы .data, т.е. так:
Код:
.data
buffer db 1000h dup <0CCh>
buffer db 1000h dup <0CCh>
В этом случае эти переменные будут физически присутствовать в файле программы, т.е. считай, что твой exe уже на 4кБ больше.
Иначе, если тебе нет необходимости инициализировать переменные или тебе достаточно, чтобы они были занулены, то объявляй их в контексте директивы .data?:
Код:
.data?
buffer db 1000h dup<?>
buffer db 1000h dup<?>
В этом случае данный буфер на размер программы(на диске) не повлияет.
Вот спасибо агромное.
Вот код
assume edi "двоеточие" ptr IMAGE_DOS_HEADER
mov edi,hMap
add edi,[edi].e_lfanew
mov pPE,edi здесь будет адрес PE загаловка так и есть
;;;;;;;;;;;;;;;;;;;;;;;;;;
add edi,4
mov pFileHeader,edi тут будет адресс файлового заголовка
;;;;;;;;;;;;;;;;;;;;;;;;;;
add edi,sizeof IMAGE_FILE_HEADER
mov pOptionalHeader,edi здесь должен быть адрес опционального заголовка и что значит "sizeof" негде немагу найти после компеляции выгледит как add edi,14 почему если
typedef struct _IMAGE_FILE_HEADER {
WORD Machine; 2
WORD NumberOfSections; 4
DWORD TimeDateStamp; 8
DWORD PointerToSymbolTable ;12
DWORD NumberOfSymbols; 16
WORD SizeOfOptionalHeader; 18
WORD Characteristics; 20
} IMAGE_FILE_HEADER;
почему 14 а не 20 обясните пожалуйста.
код с сайта W A S M . R U
Может потому, что 14h=20d?;)
Очень нужен правильный пример по заполнению структуры SERVICE_TABLE_ENTRY
Код:
void WINAPI Service_Main(DWORD dwArgc, LPTSTR *lpszArgv); // реализацию этой функции посмотришь в MSDN, там есть пример
SERVICE_TABLE_ENTRY ste[] = {{TEXT(""),(LPSERVICE_MAIN_FUNCTION)Service_Main}, {NULL, NULL}};;
........
........
........
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
StartServiceCtrlDispatcher(ste);
return 0;
}
SERVICE_TABLE_ENTRY ste[] = {{TEXT(""),(LPSERVICE_MAIN_FUNCTION)Service_Main}, {NULL, NULL}};;
........
........
........
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
StartServiceCtrlDispatcher(ste);
return 0;
}
А есть какая то API ф-ция устанавливающая значение поля dwCurrentState структуры _SERVICE_STATUS?
Код:
// Устанавливаем состояние службы - "running"
ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ss.dwServiceSpecificExitCode = 0;
ss.dwWin32ExitCode = 0;
ss.dwCheckPoint = 0;
ss.dwCurrentState = SERVICE_RUNNING;
ss.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
ss.dwWaitHint = 0;
SetServiceStatus(ssh, &ss); // ssh - получаем вызовом RegisterServiceCtrlHandler
ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ss.dwServiceSpecificExitCode = 0;
ss.dwWin32ExitCode = 0;
ss.dwCheckPoint = 0;
ss.dwCurrentState = SERVICE_RUNNING;
ss.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
ss.dwWaitHint = 0;
SetServiceStatus(ssh, &ss); // ssh - получаем вызовом RegisterServiceCtrlHandler
это "изнутри" сервиса.
Через ControlService - можно статус поменять "снаружи" :-))))
Заранее спасибо
точно не помню, поэтому не гарантирую правильность, но можно еще так сделать
LoadLibraryEx(pchar(filename),0,DONT_RESOLVE_DLL_REFERENCES);
find db "D:\*.*",0
file db 40 dup (?)
...
invoke FindFirstFile,addr find,addr file
возвращает в file вот что
004032B0 10 00 00 00 14 64 EF 69 DE B9 C6 01 46 ... dпiЮ№Ж F
004032C0 E2 75 66 E4 C1 C6 01 46 E2 75 66 E4 C1 C6 01 вufдБЖ FвufдБЖ
в справочнике написано рода такого
typedef struct _WIN32_FIND_DATA { // wfd
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[ MAX_PATH ];
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;
но что-то я не могу понять что к чему.
Подскажите для чего нужна MSVCR71.dll
это runtime библиотека от MSVC++ 2003 ;-))))
А поточнее можно и есть ли у кого нибуть справочник по OPENGL32 (его API) а то никак немагу найти.
PS это на VS 2002, ибо я на нем застрял :)
заранее спасибо
:confused: WSAAsyncSelect()* функция указывает посылать сообщение от сокета заданному ОКНУ при любом из заданных сетевых событий. А если никокого окна несуществует то как тогда получать сообщения?
В нити recv
Что значит постоянно проверять входящие сообщения?
пробовал SendDlgItemMessageно ничего невыходит?
Ты не получишь обратно управление в главную программу, пока recv не примет данные или сокет не будет закрыт. Если его вызывать в цикле главной программы, то она у тебя просто будет висеть.
:confused: Немагу разобраться как правильно послать созданнаму окну сообщение WS_EX_TOPMOST или Static "SS_CENTER,SS_RIGHT,SS_LEFT" как непробовал всё время неработает.
SetWindowPos(your_hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
Вообще че ты используеш ВинАпи?