· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Структуры в NASM.

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Мар 17, 2004 15:08:23

Здравствуйте!

Возник вопрос, связанный с ассемблером NASM.
Каким образом можно реализовать структуру:

startinfo STARTUPINFO <?>
processinfo PROCESS_INFORMATION <?>

Для вызова функции CreateProcessA?
В документации я нашёл только разымытые описания
реализации структур, но сформировать startinfo
/processinfo самому у меня не получилось.
Может быть вы приведёте примеры именно этих структур?
PS: может быть, кто-нибудь подкинет ссылку на
хороший русский мануала по NASM?

Заранее спасибо!

1990.


Дата: Мар 17, 2004 22:43:02

Буду более точным: как вызвать функцию CreateProcessA. Пожалуйста, расскажите как использовать структуры и как будет выглядить сам код.


Дата: Мар 17, 2004 23:54:11

У меня чиста глупый вопрос: эта штука описана довольно таки подробно в MSDN. Тогда в чем вопрос? И вообще вызов этой PROC управляется неплохо и с нулевыми параметрами в STARTUPINFO и всё потом (разультат) пишется в PROCESS_INFORMATION, который по своей структуре довольно таки прост. Еше раз по-подробнее - "в чем вопрос"


Дата: Мар 18, 2004 01:27:46

1990

Я вот не пойму, если у тебя такие проблемы возникают с nasm'ом то зачем он тебе нужен.
Если ты споткнулся на банальном CreateProcess то как же ты будешь кодить дальше.

ЗЫ: наверняка у nasm'а есть свой форум, попробуй сходить на оф. сайт.


Дата: Мар 18, 2004 10:57:05 · Поправил: 1990

PavPS
Ты думаешь я MSDN не читал или не видел, как вызывал CreateProcessA? Структуры processinfo\st. отличаются от структур в MASM или TASM. У меня нет никаких включаемых файлов для NASM (Win32с.inc). Поэтому приходится формировать структуры самому и примеров никаких я не было. Вопрос был в том, что возможно у кого были примеры хотя бы одной структуры и примеры вызова или толковые мануалы. Сейчас я это всё нашёл.
Asterix
Мне нравится синтаксис NASM. Без формальностей, как MASM.
(Это не укор MASM). Без макросов и ... главное, чтобы было как можно более сложно!
Я, как уже говорил, разобрался с проблемой. А как кодить? Я ведь и MASM не знал как быть вначале... ;) А ты на чём программируешь?
На форуме побывал и сразу получил ответ.


Дата: Мар 18, 2004 11:27:16

1990

хорошим тоном было бы изложение решения здесь: линки, пример. Если человек наткнётся в поиске на эту тему, будет ему шастье. имхо


Дата: Мар 18, 2004 14:40:30

> А ты на чём программируешь?

masm32&fasm ;-)

> Без макросов и ... главное, чтобы было как можно более сложно!

А тебя никто и не заставляет использовать макросы, можешь вместо .IF/.ENDIF использовать
cmp ..., ...
jnz ...
и вместо invoke - call ;-)
и т. д.


Дата: Мар 18, 2004 15:44:20 · Поправил: Dr.Golova

Как делать вложенные структуры я не знаю - не прихдилось, обходился таким методом:
  bits 32

struc CONTEXT
.ContextFlags:  resd      1
.iDr0:          resd      1
.iDr1:          resd      1
.iDr2:          resd      1
.iDr3:          resd      1
.iDr6:          resd      1
.iDr7:          resd      1
.FloatSave:     resd      01Ch ;FLOATING_SAVE_AREA <>
.regGs:         resd      1
.regFs:         resd      1
.regEs:         resd      1
.regDs:         resd      1
.regEdi:        resd      1
.regEsi:        resd      1
.regEbx:        resd      1
.regEdx:        resd      1
.regEcx:        resd      1
.regEax:        resd      1
.regEbp:        resd      1
.regEip:        resd      1
.regCs:         resd      1
.regFlag:       resd      1
.regEsp:        resd      1
.regSs:         resd      1
; Other unneeded shit...
endstruc

...
mov    edi, [esp + 0Ch + 8] ;; get context ptr
add    dword [edi + CONTEXT.regEip], 02 ;; skip


ЗЫ: Nasm действительно приятнее остальных монструозных поделок.


Дата: Мар 18, 2004 16:03:31

Asterix
Это верно! Никто... К MASM я отношусь попрежнему неплохо.
Dr.Golova
Спасибо! На основе этонго буду тренироваться.
ЗЫ: Nasm действительно приятнее остальных монструозных поделок. - здорово сказано!


Дата: Мар 18, 2004 16:05:17 · Поправил: 1990

Dr.Golova
А как вообще делается CreateProcess (как сделан у тебя) - я что-то сомневаюсь в своей правоте, по поводу одного пункта...
xzazet
Я постараюсь. Может быть даже мануал напишу (когда-нибудь).


Дата: Мар 18, 2004 17:18:33

Здаётся мне что nasm изначально был заточен под nix'ы, какой там CreateProcess... ;-)


Дата: Мар 18, 2004 20:03:56

Asterix
Вполне возможно, но сейчас много пиплов пишут на NASM под Windows. Экзотично... А как будет CreateProcessA на FASM.


Дата: Мар 18, 2004 20:25:17

format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'

section '.data' data readable writeable

  szFileName	 db "target.exe",0
  StartupInfo	 STARTUPINFO
  ProcessInfo	 PROCESSINFO

section '.code' code readable executable

  start:

   mov [StartupInfo.cb], STARTUPINFO
   invoke CreateProcess, szFileName, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED,\
			 NULL, NULL, StartupInfo, ProcessInfo
   test eax, eax
   jz @error
   invoke ResumeThread, [ProcessInfo.hThread]
   invoke CloseHandle, [ProcessInfo.hThread]
   invoke CloseHandle, [ProcessInfo.hProcess]
@error:
   invoke ExitProcess, 0


section '.idata' import data readable writeable

  library kernel, 'KERNEL32.DLL'

  import kernel,\
	 CreateProcess, 'CreateProcessA',\
	 ResumeThread, 'ResumeThread',\
         CloseHandle, 'CloseHandle',\
	 ExitProcess, 'ExitProcess'


Дата: Мар 18, 2004 20:51:25

Asterix
Спасибо!


Дата: Мар 18, 2004 23:45:25

Asterix
mov [StartupInfo.cb], STARTUPINFO

ИМХО лучпе будет:
mov [StartupInfo.cb], sizeof.STARTUPINFO


В FASM-е только имя означает адрес а не размер. А с первого взгляда трудно определить что STARTUPINFO - структура.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061