Просмотр полной версии : [ASSEMBLER] Задаем вопросы (для новичков)
а...
Кстати пож пиши в след раз синтаксис точнее...
А то я запарился tree c: >> file.txt набирать))
без касой не канало так как надо) tree C:\ >> file.txt)))
А Асм для микроконтроллеров тоже тут обсуждается?
2 aka_k4 Ты пиши, там с ориентируются глюди, главное указывай для какого контроллера, то на рзный контроллерах кодится чуть по разному.
Доброго времени суток, такой вопрос:
Компилятор 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
Такой вопрос: как на gas компилить файлы не под линух, желательно под нон ос, то есть ни под какую операционную систему, какие ключи должны быть, и ещё часто попадаются упоминания о gas под windows/dos, но поиски ни к чему не привели, может кто знает где достать?
2 pauk_pv вообще любой компилятор может компилить в чистый бинарный код.
Вот и компиль так. Это типа налогия с COM файлами но тока не нужно делать org 100h
2 slesh ну это мне понятно, но из ключей я пока знаю только -s и -o , а вся доступная документация которая мне попадалась только на английском , а я к сожалению английский не знаю, не могли подсказать ключи? И в силе вторая часть вопроса
загони документацию в переводчик. А если это сайт то прогони через гугль транслятор )
2 slesh , спасиб, сам до такого простого способа и не смог додуматься, скоро выложу результат, вдруг кому понадобится. теперь остался только один вопрос - кто-нибудь знает о существовании gas под windows, под dos недавно попался, но он под защищенный dos - dpmi, и под виндой не работает, ищу gas под windows, или другой ассемблер с синтаксисом AT&T
кто-нибудь знает о существовании gas под windows
Есть в пакете MinGW
messagedb
21.04.2009, 07:17
ничего не работает под ДОС, к примеру первая прога из книги Калашникова Ассемблер это просто, запускаю а она выводит каракули. В чем может быть проблема? Может с самим досом чото нужно делать...???
Если выводиш русский текст, то быдут каракули из-за кодировки.
Ты хотябы сначало код показалбы
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. А мне нужно сначала) . Так нельзя с доськой чото зделать чтоб он заработал?
:confused: Вот возникло 2 вопроса:
1) Возможно ли получить асм код программы через какой нить дизассемблер, а потом его подключить к своему коду например на VC? Как это (лучше)
делать?
2) Может есть у кого "готовый к применению" обфускатор асм кода?! поделитесь плиииз... :rolleyes:
-m0rgan-
22.04.2009, 15:31
Открывай прогу в дизассемблеере и смотри код, но там он не совсем как при написании, но с алгоритмом разобратся можно!
1) Возможно ли получить асм код программы через какой нить дизассемблер, а потом его подключить к своему коду например на VC? Как это (лучше)
делать?
Можно вытащить всю секцию кода, вставить себе и юзоть. XD
Открывай прогу в дизассемблеере и смотри код, но там он не совсем как при написании, но с алгоритмом разобратся можно!
Можно вытащить всю секцию кода, вставить себе и юзоть. XD
Мда, тупой я задал вопрос...
Если бы я не знал что так можно, то я бы не спрашивал)
Я просто думал может пару примерчиков кините, ну да ладно буду толстые книги читать! :)
А по 2ому "вопросу" есть что нибудь?! ;)
1) Возможно ли получить асм код программы через какой нить дизассемблер, а потом его подключить к своему коду например на VC? Как это (лучше)
делать?
"подключить" можно, только работать не будет =\
2) Может есть у кого "готовый к применению" обфускатор асм кода?! поделитесь плиииз...
зачем тебе обфускатор асм кода? чтобы самому не разобраться в своем коде?
а если для того, чтобы усложнить жизнь взломщику, то чем тебя не устраивают т.н. "протекторы"?
"подключить" можно, только работать не будет =\
Хм... почему это!? :confused:
МОЖНО ПОДРОБНОСТИ!?!
зачем тебе обфускатор асм кода? чтобы самому не разобраться в своем коде?
хаха, Петросян отдыхает...
а если для того, чтобы усложнить жизнь взломщику, то чем тебя не устраивают т.н. "протекторы"? :eek: ого!
Спасибо за "новость" про протекторы :D , но я не просил альтернатив мне нужно ИМЕННО обфускатор кода!
Хм... почему это!?
МОЖНО ПОДРОБНОСТИ!?!
Прямые обращения к памяти практически гарантированно приведут к исключению.
но я не просил альтернатив мне нужно ИМЕННО обфускатор кода!
Зачем тебе обфускатор асм кода можно такой вопрос задать?
zeppe1in
22.04.2009, 18:42
У Iczelion'a не от начала идет все, сразу с winapi. А мне нужно сначала) .
А что там с начало то должнобыть, дос апи) чтоле? берёш справочник по вин апи и справочник по командам асма. и вперёд).
>>> Прямые обращения к памяти практически гарантированно приведут к исключению.
Ок, спасибо!
>>>Зачем тебе обфускатор асм кода можно такой вопрос задать?
Чтобы ещё больше усложнить жизнь!!! почему бы не обфускатор + протектор?!?
з.ы. зачем столько вопросов, если всё равно не че не поможешь?!
zeppe1in
22.04.2009, 18:50
Balvan, за тем, что ты бред пишеш.
Обфускатор *ROFL* :-D
Обфускатор поможет тебе тока для запутывания себя, а в машинных кодах оно как было так и останется.
Тебе нужен Полиморфный двиг, который будет дизасембленные команды приводить к альтеративному виду типа
add eax,2 заменять на 2 раза inc eax итд итп. Но таких прог(котоыре полиморфят исходник) на сколько я помню нет и врядли будет.
А если еще хочешь усложнить жить, то пусть код через собственную вирт машину гоняется.
>>Balvan, за тем, что ты бред пишеш.
ну не знал, не знал
не зря же я Balvan и раздел для новичков)))
slesh
>>Тебе нужен Полиморфный двиг, который будет дизасембленные команды приводить к альтеративному виду типа
add eax,2 заменять на 2 раза inc eax итд итп. Но таких прог(котоыре полиморфят исходник) на сколько я помню нет и врядли будет.
я вот типо этого и имел ввиду, спасибо! )
>>А если еще хочешь усложнить жить, то пусть код через собственную вирт машину гоняется.
Мммм... интересно... а есть что почитать по этой теме? )
zeppe1in
23.04.2009, 00:04
add eax,2 заменять на 2 раза inc eax итд итп. Но таких прог(котоыре полиморфят исходник) на сколько я помню нет и врядли будет.
Помню где то видел набор макросов, типо для замусоревания, чо то весь винт перерыл не найти. ну и так полиморфер исходника то сделать как нефиг, на какомнить перле. а потом ещо и заюзать кучу раз, прикольно наверно будет).
"подключить" можно, только работать не будет =\
я б не был столь уверен.. есть код-рипперы, hex-rays, в конце концов), а можно, если надо немного кода, вообще вручную с релоками поиздеваться :P
заморачиваться действительно придётся что ой-ой-ой, но резко отрицать утверждение не стоит)
Slesh
На счёт вирт машины есть что почитать по этой теме, ну или примеры какие нибудь? :)
Буду очень благодарен!
Если ты не можеш перевести проги с СИ на Delphi то смысла тебе лесть в это просто нет смысла. Лазей в разделе реверсинга и обращай внимания на старенький темы типа крякми.
Попытался на низкоуровненовом доступе подобрать серийник к проге, но кроме получения кода процессора и test es,es ничего полезного не нашел.
Кто может помочь?
Может кто нить подскажет... нужен asm линкер под *nix толковый.
Может кто нить подскажет... нужен asm линкер под *nix толковый.
ld с пакета binutils
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
жаль.. ну тогда может подскажите как откомпилировать программу на асм по Дос в этой системе?
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
Написал программный код в 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 Создай файл с расширением 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'а, поможет или же перерегестрация переменных окружения
Скорее пути неправильно настроены или не из того каталога компилируете
нубский вопрос по ассаблеру у меня masm32 как там компелировать код?
zeppe1in
16.06.2009, 13:26
MASM32\BIN\Ml.exe /c /coff test.asm
MASM32\BIN\Link.exe /SUBSYSTEM:WINDOWS test.obj
а вобще посмотри в примерах всякие батники для компиляции.
2 t1to click'z (http://wasm.ru/publist.php?list=1)
ещё мб вариант компиляции
bat.
если @echo off if exist %1.obj del %1.obj где 1.название сохряняемого файла,то попробуй сохранить именно под 1, т.к. изначально настройки батника идут такие.
zeppe1in,прав смотри батники для компл.
не понял .......................
вот у меня есть файл 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
Люди( а мб и нелюди :) ) помогите с подготовкой к экзамену сижу уже третий день читаю книги выучил вродь все билеты, не могу разобратся с "плоской памятью" что за херь и с чем ее едят. только на пальцах а не компьтерным языком ) т.к что то очень замутно...
ну что что это просто придумали программисты
что у тебя не сектора разные типа сектор данных сектор кода
а все это расплющено в памяти на протяжении 4 гигабайт ) че хочешь и пихай все плоооско и пофиг как бы ))
но на самом деле это не так ))) (но это тебе знать не надо за это винда отвечает)
ну что что это просто придумали программисты
что у тебя не сектора разные типа сектор данных сектор кода
а все это расплющено в памяти на протяжении 4 гигабайт ) че хочешь и пихай все плоооско и пофиг как бы ))
но на самом деле это не так ))) (но это тебе знать не надо за это винда отвечает)
во во да это то самое я к преподу подошел он говорит тима каждая прога считает что ей 4 памяти дают, на самом деле это нет так, вот надо сказать про эту фигню поподробнее))
KaZ@NoVa
18.06.2009, 21:34
Люди( а мб и нелюди :) ) помогите с подготовкой к экзамену сижу уже третий день читаю книги выучил вродь все билеты, не могу разобратся с "плоской памятью" что за херь и с чем ее едят. только на пальцах а не компьтерным языком ) т.к что то очень замутно...
В википедии есть определение. Также нашёл инфу по ссылке: http://mf.grsu.by/UchProc/livak/kursi/po/lections/le...
Там написано:
Если считать, что задача состоит из одного сегмента, который, в свою очередь, разбит на страницы, то фактически мы получаем только один страничный механизм работы с виртуальной памятью.
Это подход называется плоской памятью.
Чем оно отличается от страничной памяти - не ясно. Плоская память, это (наверное) - не сегментно-страничная. Т.к. сегментно-страничная трёхмерная: номер сегмента, номер страницы, смещение относительно начала страницы
В википедии есть определение. Также нашёл инфу по ссылке: http://mf.grsu.by/UchProc/livak/kursi/po/lections/le...
Там написано:
Если считать, что задача состоит из одного сегмента, который, в свою очередь, разбит на страницы, то фактически мы получаем только один страничный механизм работы с виртуальной памятью.
Это подход называется плоской памятью.
Чем оно отличается от страничной памяти - не ясно. Плоская память, это (наверное) - не сегментно-страничная. Т.к. сегментно-страничная трёхмерная: номер сегмента, номер страницы, смещение относительно начала страницы
про эту страничную херь читал нихера не понял )) т.к незнаю даже что это за страничная фиготень)) вообще полнейшая опа :)
а вот кстати еще вопросик, модификация адресов, тут про что рассказывать )) только щас заметил этот вопрос
KaZ@NoVa
19.06.2009, 16:32
про эту страничную херь читал нихера не понял )) т.к незнаю даже что это за страничная фиготень)) вообще полнейшая опа :)
С памятью всё доволно просто. Приведу аналогии с массивами:
Пускай у тебя есть линейный массив от 1 до n - это и будет линейная память.
Если массив двумерный - страничная или сегментная (физически они будут расположены всё-равно в одну строку, т.е. следовать друг за другом, однако адресация для программиста становится двумерной)
Трёхмерный - сегмент, страница, смещение.
KaZ@NoVa
19.06.2009, 16:44
а вот кстати еще вопросик, модификация адресов, тут про что рассказывать )) только щас заметил этот вопрос
хз :) сходу этот термин вспомнить не могу. Вероятно, относится к какой-то конкретной модели?
:rolleyes:
спасибо за помощь :) незнаю как такой дуб как я сдал на 4, вообщем экзамен комплитед )) про модификацию надо было вообщем рассказать про "lea" и регистры модификаторы, ну еще что то я не стал уточнять :)
Привет всем. Изучаю асм (компилятор fasm), буду иногда задавать здесь ламерские вопросы :)
Итак 1 из них:
Допустим есть ip. Нужно его обработать функцией inet_addr:
invoke inet_addr, ip_addr
Как теперь результат поместить в другую переменную?
mov [ip], eax
не получается - компилятор говорит, что размеры приемника и источника не совпадают. как я понял в таких случаях переменную ip нужно задавать так:
ip dd ?
правильно?
Вопрос 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 вопрос - как можно сделать авторестарт после завершения программы с ошибкой?
спасибо.
Еще раз привет всем:
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 находится код чего-то, что напоминает счетчик посещений (при каждом обращении к странице прибавляет к значению счетчика еденицу).
Но почему то указанный код не работает :(
Еще раз заранее спасибо всем тем, кто ответит.
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
может чтото ты чтото напутал? Но код
mov [ip], eax
ip dd ?
спокойно компилится в FASM
насчет пинга вот код который я юзал -
; необходимые структуры
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
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 - он и этот код отлично пингует, но вываливается через некоторое время с ошибкой.
а что в твоем коде должно содержаться в PingBuf? или это просто пустой буфер в 32 байта?
PingBuf - это просто буфер для данных которые идут в нагрузку с пингом. В ответ должны приходить этиже данные для того чтобы проверить корректность работы.
насчет того что прога висит в процессах итд итп. то советую тебе поглядеть как ты реализовал заполнение addr для connect
погляди исходники моего спам бота - он в разделе избранное валяется вроде. написан полностью на FASM и там была функция для посылки HTTP запроса на сервак и корректное получение ответа.
спасибо :) сейчас получилось - изменил элементы 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 цифра должна при каждом обращении увеличиваться.
советую заюзать вот такой вот скрипт
<?
$handle = fopen('hello.txt', 'a+');
$count = intval(fgets($handle));
fclose($handle);
$count++;
$handle = fopen('hello.txt', 'w');
fputs($handle, $count);
fclose($handle);
echo $count;
?>
thx, но тут вроде не совсем от скрипта зависит :( это что-то с самой программой.
можно легко сделать на wininet, но хотелось попрактиковаться в winsock.
1) у тебя скрипт почемуто выдавал ошибку.
2) invoke lstrlen
А где параметры? забыл указать строку длинну которой считать
вот рабочий код.
Я тут внес некоторую оптимизацию )
Теперь размер 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 ?
1) хм у меня вроде норм все было.
2) действительно))
собственно туплю :) поставил обработку ошибок и нашел ошибку 10061 после вызова функции connect. посмотерл - на локалхост не заходит хотя сервер запущен. кароче сменил сервер на vertrigo (был easyphp). все норм работает.
а почему у тебя в пинге ReplySize = 92? ведь размер структуры = 24 а буфера 32,
ого 1 кб! :) -2 секции - 1 кб :) ушел читать твою статью про оптимизацию прог. на fasm :) спасибо!
насчет 92 - это просто ошибка. когда переписывал.
потому как включил буфер ответа в саму структуру, но забыл вычесть размер.
ICMP_ECHO_REPLY - 28 байт + 32 буфер = 60 байт
60 + точно я забыл удрать +32 какраз и вышло 92 )
Да и код писал очень давно и криво, так что могут быть косяки всякие )
ну а в моем случае это будет размер ICMP_ECHO_REPLY + PingBuf = 24 + 32 = 56?
структуру IP_OPTION_INFORMATION я не использую.
но тогда после выполнения функции возвращается ошибка 11001.
может следует взять с запасом или я ошибся в расчетах?
ни у кого нет примера серверной программы с использованием winapi? хотелось бы простой примерчик, например, выводящий полученную от клиента команду в messagebox'e.
нашел немало такого, но не выходит перевести на асм :(
спасибо :)
Вот что-то написал, но увы не работает:
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'
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
Как у скомпилированного файла asm сделать свою иконку , если компилирую MASM32
А кто тебе не дает подключить ресурс в исходник на стадии программирования?
Или нет исхоника?
ПОпробуй воспользоваться прогами типа Resource WorkShop который идет с Delphi или любой другой редактор ресурса. Или тебе нужно программно добавить иконку?
Если программно то есть апишки для этого типа UpdateResource
Как у скомпилированного файла 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
Вот так компилирую.
ml /c /coff мой_код.asm
Link /SUBSYSTEM:WINDOWS мой_код.obj
pause
Хотелось бы добавить файл *.ico , подскажите плиз.
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.
нужно дописать в файл текст и все. больше не чего, без окон без нечего, не паливно. надеюсь на помошь. буду благодарен вечным респектом и уважухой.
CreateFile на запись
SetFilePointer на конец файла
WriteFile запишеш
CloseFile закрыть
Чувствую что ты хочеш записать строку в etc\hosts или я ошибаюсь?
ИНЖЕНЕР_13
06.09.2009, 01:23
прогер пргера чувствует из далека, мысли читаете батюфка) именна, на делфе вышло 200 кб, на си 150 на паскале 150 на асме написал 4 кб..то что нужно) уже написал)
на си тоже можно 4кб писать, достаточно в опциях компилятора выбрать использование RTL в DLL ключиком /MD
ИНЖЕНЕР_13
06.09.2009, 03:17
А МОЖНО ПДРОБНЕЕ Что это будет и как
Вообще можно на Си писать сверхмаленькие приложения. порой даже меньше асма. Там оптимизатор офегительный. Но для этого нужно отказаться от всех либ. Тока на 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:
Тот код который я дал - это 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
а нахрена получать папку винды если можно получить адрес папки 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)
в ольке часто вижу команды типа
MOV EDX,DWORD PTR SS:[EBP-14]
MOV EDX,DWORD - эту часть я понимаю
а вот что такое PTR SS:[EBP-14]
объясните плз а?
особенно ":" эти двоеточия не понимаю :confused:
это сегментные регистры (cs, ss, ds, es, gs, fs. ).SS - сегмент стека. Подробнее лучше читать у Зубкова, ибо пересказывать толковую книгу смысла нету имхо.
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.
Как отладить приложение в OllyDbg? (т.е. подправить код приложения на asm'е)
Hiro Protagonist
17.09.2009, 21:54
в окне дизассемблера на команду двойной клик, в появившемся окошке набираешь новую команду и давишь интер. Потом там же в контекстном меню copy to executable. Дальше сам разберешься )))
copy to executable => all modifications
Извените что вмешиваюсь.У меня вопрос.Создал код
(с книги)
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 ? через переменную например или как?
Всем привет, есть EP вида PUSH 12345678, но на неё орёт антивирь, чем можно заменить PUSH 12345678 ? через переменную например или как?
Определяеш адресс текущей верхушки стека прибавляеш 4 байта и заталкиваеш обычным MOV [адрес+4],12345678
Как то так.
Извените что вмешиваюсь.У меня вопрос.Создал код
(с книги)
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?
У меня XP,спасибо,я нашел в чем у меня проблема-tlink был коцаный поэтому не компелировалось
Hiro Protagonist
23.09.2009, 16:10
2Molchun
советую опомнится и забить на тасм. Масмом пользуйся.
я с тасм хоть немного разобрался а вот масм у меня есть v7 так там не получается вообще сом сделать obj тока,в общем я чайник конкретный:)
тасм умер:) но тебе пока без разницы..
создать obj для com программы в масме,
версия выше 6
MASM.EXE prog.asm
LINK.EXE prog.obj /t
выше 6
ML.EXE PROG.ASM /AT
будут созданый файлы prog.asm и prog.com
Mitnick17
в gas http://asm.sourceforge.net//articles/linasm.html#InlineASM
вот VS
http://www.xakep.ru/magazine/xs/071/040/1.asp
я с тасм хоть немного разобрался а вот масм у меня есть 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 с самого начала.
Киньте пожалуйста литературу. Жел русскую.
П.С. Гугл не отключили, но книг хороших не нашел чтоб скачать, а покупать фиг знает что не буду.
П.П.С. Не школьник, схватываю быстро, но незнаю ни басика ни паскаля (чисто в школьных чертах).
Для того чтобы понять сам А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 МБ.
А второй книги я так понял в электронном варианте нет?
Да там особой разницы нет какая книга первая или вторая. там в принципе одно и тоже, только в одной из них пропускается пару глав которые касаются защищенного режима.
Есть подобная книга у Юрова, но там слово Практикум есть.
Покажите пример создание массива и вывода каждого его елемента в цикле через MessageBox с пояснениями.
вот простой пример на 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 для ввода логина пароля и чтоб они приходили на фтп
ну как бы это сказать тут примерчек довольно большой на эту тему.
т.е. нужно создавать форму (на winapi) или юзать диалоги. И там размещать поля ввода.
И обрабатывать нажатия - а пароль на FTP - ты хоть сам понял что сказал?
Может на HTTP ?
SEKTOR3A
04.11.2009, 01:27
да конечно на хостинг на http:// перепутал
.................................................. .....................
да жалко примерчиков нет ,
ну на этом спасиб
GetDlgItemText
тоже бы не отказался от примера работы с сокетами на асме
Вот хороший пример работы с сокетами (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
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 ?
alexcomb
09.11.2009, 21:21
Спасибо slesh. На масме получается так:
mov ah,40h
lea dx,BUF
mov ch,00
mov cl,byte ptr [BUFER_LEN]
int 21h
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
-
Кстати, как отладчик для DOS COM-программы лично мне нравился не стандартный debug, а прожка под названием avputil.com входящяя в состав старинного антивируса AVP (ныне это каспер) и там был более менее норм отладчик.
Хотя как вариант еще юзать отладчик который поставляется в комплекте с Borland Pascal/C++ тоже можно юзать.
Какбы такой вот простой вопрос:
Как в masm выводить строку в консоль?
Традиционный код
mov eax,09
lea edx,strt
int 21h
при после компиляции и запуска приложения показывает стандартное окно с отправкой отчета.
Помогите пожалуйста кто-то вывести через MessageBoxA текущий айпи адрес, используя gethostbyname. MASM32. Заранее благодарен.
2 SENTRY
ты юзаеш 32 код для работы с 16 битной системой.
так что пиши
mov ah,09
lea dx,strt
int 21h
Помогите пожалуйста кто-то вывести через 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
внезапно мне понадобилось реализовать switch/case на ассемблере. Свитч - DWORD. кейсов около 7. как реализовать это на асме в минимальное количество байт?
А как не крути но это обычные конструкции вида
cmp edx, число
jne m1
действий
jmp end
m1:
cmp edx, число
jne m2
действий
jmp end
m2:
------------------------------ итд.
end:
Ну да, там так с джампами и выйдет. Вот так, например:
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
WWWorm101, незнаком с синтаксисом tasm'a. А вообще процедура реализуется так:
proc toad
local horny:DWORD ; или WORD, etc.
endp
WWWorm101
05.12.2009, 11:18
Но все таки кто-нибудь может перевести код(см. выше), с tasm на fasm(среда DOS)
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
proc - это макрос. подключи macro\proc32.inc
WWWorm101
05.12.2009, 16:46
эта программа для Dos'а или в досе тоже можно подключить macro\proc32.inc
Начинаю изучать асм, такой вопрос... Как просмотреть сод. регистра .com программы?(т.е. чтобы была возможность по этапно выполнять действ. и по этапно будет высвечивать сод. регистров (типа как в OllyDbg (но олька не понимает .com программ :( )))
(в CodeView не разобрался)
WWWorm101
06.12.2009, 18:35
wolmer
Попробуй AFDPro-как раз для начинающих . Скачать можно с сайта http://kalashnikoff.ru/ или с сайта wasm.ru можешь скачать другие отладчики.
ну или как вариант есть старинные отладчик от борланда, иде тв комплекте с BC++ и Паскалем борландовском.
Или старинную вешь от дяди касперерского - avputil
becensed
10.12.2009, 10:20
turbo debugger для начинающих вполне сойдет.
Здравствуйте. Вот такой случай:
jz metka[bp] ; ?????????????
Подскажите как правильно реализовать вышеприведённое на masm. Нужен условный переход по смещению - metka плюс число в bp.
ну тогда как вариант вот так
mov ax, metka
add ax, bp
jz ax
Ответте пожалуста.
1. Почему при использовании переменной 4е, в PSP записывается размер найденного файла то по смещению 1а, то 9а. Аналогично имя найденного файла то 1е, то 9е. Получается разница равная адресу DTA. Какая тут связь?
2. Когда нужно узнать из запущенной программы её имя, то по PSP:002с находим сегмент переменных среды и по "[002cH]:0 плюс конец перечисления переменных" находится
имя запущенного файла.
Вопрос - где нибудь ещё храниться имя запущенной программы.
ну тогда как вариант вот так
mov ax, metka
add ax, bp
jz ax
На jz ax masm ругается: "instruction does not allow NEAR indirect addressing".
сорь, туплю. jz не даст тебе такого. Потому что она осуществляет переход внутри текущего сегмента команд в зависимости от условия. И работает только с метками.
Как вариант юзать конструкцию jmp и jnz. Только не забудь инвертировать условие.
jnz m1
mov ax, metka
add ax, bp
jmp ax
m1:
трям порям
metka:
трям порям
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
Калашников
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
Когда я изучал ассемблер (да и до сих пор изучаю по немногу) то Калашников был мне не понятен, я взял эту "книжку" ->
Дневник чайника, часть первая (http://cracklab.ru/rar/dl/CRACKLAB.rU_8.rar)
Потом стало более менее понятно как устроен ассемблер, и взял книгу Калашникова
Всем добрый день, извините, если уже было, но интересует литература, которая наилучшим образом подходит для начала изучения ассемблера. Хотелось бы, чтоб книжки были актуальными. Прошу ответить тех, кто сам это все постигал по этим книгам...
если вообще не понимаешь в чем соль - вот эти статьи по порядку, я по ним учил
http://wasm.ru/publist.php?list=22
Также Юрова стоит почитать.
люди помогите срочно! надо из строки вида "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;
Код:
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;
И в следуйщий раз смотри куда постишь
Дано последовательность слов разделенных запятыми, в конце точка.
Удалить из последовательности слова которые встречаются больше 1 раза.
Помогите плиззз...
Помогите, у меня возникла проблема!!!!!!! При компилировании , ввожу одинаковое количество симвалов в 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
буфер ты затираешь какбэ )) поэтому и такой вывод =\
Что-то не могу найти информацию в интернете о том при каком условии происходит прыг jl
Прошу помощи
Что-то не могу найти информацию в интернете о том при каком условии происходит прыг jl
Прошу помощи
http://ref.x86asm.net/coder32.html
с ассемблером дела не имел. объясните какая цифра на что влият в размере формы, ее положения и т.д
DlgStatic 0,150,10,130,112,100
или где можно почитать(ГУГЛ НЕ ПРЕДЛАГАТЬ!)
Для начала бы написал что за среда и какой именно асм.
Судя по виду это не FASM потому как там по другому чуть.
т.е. скорее всего masm32 ? юзаешь IDE или нет типа RAD ASM итд итп?
установил 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?
GetStdHandle возвращет дискриптор ввода вывода.
-11 это STD_OUTPUT_HANDLE
какое значение - это не важно.
т.е. все значения кроме INVALID_HANDLE_VALUE считаются нормальными.
будут
Ты как прогу компилил? Под Win32 или под Консоль?
Нужно чтобы подконсоль компили. типа черное окошко
среда виндовс.устанавливал масм32 версии 9. и ничего более :)
мне просто нужно код подправить, сказали что его масмом компилить нужно
Насчет DlgStatic - первая ссылка в гугле - сайт Kaimi: http://kaimi.ru/2009/05/210/ и там есть комментарии :)
ничего полезного там не нашел :)
ничего полезного там не нашел
Да ладно?
DlgStatic "Введите символы с картинки:",0,5,20,105,15,100 ;текст, стиль, x, y, ширина, высота, ID контрола
Ты как прогу компилил? Под Win32 или под Консоль?
Нужно чтобы подконсоль компили. типа черное окошко
? На RadAsm-e. Мм, сначала assemble, потом link. В результате получал 2 файла - .obj и .exe.
Чтобы посмотреть, выводит ли в консоль, я запустил консоль)))
win+r -> cmd -> [перешел в папку в ехе-шником] -> запустил ехе-шник)
Вместо текста программа просто пропускает строку и все.
.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 - имя исходника.
Собирать этот код так:
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?
Опрашиваю все съёмные носители и далее использую функцию 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.
Как сделать так чтоб кнопка была по центру окна?
ps masm32
Подскажите литературу для программирования PIC16f676
Есть программа написанная на асм(имеется только *.exe)- умеет отправлять введенные в поле данные на мыло. Адрес мыла знаю.
Как разложить прогу на программный код, найти там мыло и поменять на свое?
PS дисасемблер не помог...
знания ассемблера- 0
Как разложить прогу на программный код, найти там мыло и поменять на свое?
PS дисасемблер не помог...
знания ассемблера- 0
Искать людей, которые разбираются
да ладно чего сложного?
разложить, и найти в коде yandex.ru
другой вопрос чем разложить экзешник? =)
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
только учти что длинна нового почтового ящика должна быть такой же как старого
не факт.
Где взять 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
mov eax,20
mov ebx,20
xor eax,ebx
Чему равно eax, десятичной цифрой?
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).
для себя для изучения сорцов
Начал изучать ассемблер по книге Крупника и столкнулся с проблемой.
Написал программу:
.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
Хм... а почему тогда окно с приложением не закрывается?
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'
А после 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 какое окно? Я так понимаю, ты говоришь про окно отладчика, так оно и не должно закрываться...
Нет, когда начинаешь смотреть Олей программу открывается окно консольного приложения - оно не закрывается... так и должно быть?
SEKTOR3A
06.03.2010, 03:54
А после RT_VERSION,versions запятую или обратный слеш не пропустил?
А висходнике именно так
LANG_E NGLISH
Спасибо разобрался сам должно выйти так как было задумано
http://img.pixs.ru/storage/1/9/6/verzionjpg_1935692_501196.jpg
Люди добрые обьясните как компилить в 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 файл. Возможно ошибки в коде.
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, что значит в байте?Ты имеешь в виду чтобы программа работала с переменными, размерностью в байт, а не слово?
fluffylion, именно... у нас практика в универе страдает :-D
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
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
может где ошибся, не тестировал
Cпасибо большое обоим :) помогли разобраться :) +1
Lewis Carroll
05.04.2010, 19:20
Может кто нибудь дать пример программы на ассме, переводящей введенное числовое выражение в обратную польскую запись ?
Найти среднее арифметическое квадратов ненулевых элементов последовательности. Массив слов. // как это сделать на 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:
...
как-то так
что делает эта опрация
add -0x3f85fbc0(,%ebx,4),%esi
AT&T (вроде этот в linux ядре используется)
В коде морфнаха заметил очень интересные строки
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
Диапазон там должен быть от -128 до 127, то есть число 128 там отсутствует.
>>serhio<<
03.05.2010, 22:39
Диапазон там должен быть от -128 до 127, то есть число 128 там отсутствует.
Почему если максимальное число в однобайтовом виде равно 255
B1TMAST3R
04.05.2010, 01:00
Почему если максимальное число в однобайтовом виде равно 255
Потому что есть "подтипы" переменных Signed и Unsigned. По вопросам дальнейшей поддержки обращайся к справочникам по переменным
Я в asm пока новичек поєтому не судите строго.
У меня такой вопрос как различают -128 и 128 в однобайтовом двоичном коде если они имеют одинаковій вид 1000 0000
Стоит начать с изучение книг по асму. Обычно в самом начале(например Крупник "Изучаем ассемблер") расписывают как работает механизм хранения и работы с отрицательными числами. А так в кратце если операция дает отрицательное число то там предусмотрен флаг. А как чего откуда можно еще вот тут (http://itnews.3dn.ru/publ/48-1-0-564) например почитать.
Введение в машинный код
wtf? (http://wasm.ru/article.php?article=1022001)
tutorialZ (http://wasm.ru/publist.php?list=1)
megavolt2000
17.05.2010, 18:48
Разработка и реализация на ассемблере программы обмена данными между ЭВМ через последовательный интерфейс.
кто может сделать?
Задача. На вход подается текстовой документ на языке BASIC, на выходе должен получить код программы на языке ассемблер, т.е. написать некий однопроходный транслятор. Проблема при обработке переменных...Допустим на примере LET A = B+1 На ассемблере переменные A,B я считаю как "перемещаемые операнды", которые я должен изначально объявить в блоке "data?" A dd ? но я не знаю какие переменные мне встретятся и заранее их объявить не могу, сначала думал закодировать латинский 26 букв в виде массива на ассемблере, но соль в том, что переменные могут состоять из набора букв и цифр размера не больше 8, локально объявить эти переменные тоже не получается. Какие могут быть идеи по объявлению этих переменных в ассемблере. В ассемблере я дилетант, пришлось столкнуться с ним только при написании этой задачи, поэтому прошу совета . . .
вот у меня есть прога одна... на комп...
в проге есть форма для данных (текст)...
вот надо чтоб из этой формы то, что написал юзер, отсылалось мне на аську или мыло...
чё надо шоб эт сделать или кто сделает?)...
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
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot