PDA

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


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

VERte][
08.04.2008, 20:33
Да , я знаю , но и тот и другой отказываются компелить код
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin
Код взят из Калашникова я проблему не понимаю , а компел просто показывает что в этом коде ошибка.

хм, как правило masm ругается на отсутсвие директивы assume, если будешь дальше читать по Калашникову (между прочим неплохая книга, для новичка) то пиши так для компилов 4.х и 5.х :

CSEG segment
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin


и так для 6.11 (и наверно более поздних версий до 6.15):
CSEG segment 'CODE'
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin

А еще смотри не перепутай компиляцию для exe и com, com это как правило ключ T/ при линкеровке.

Плюс, далее предупреждая возможные вопросы =), прямое отображение в видеобуфер из-под wincmd работает не корректно (вернее нужные данные загружаются, но далеко не всегда отображаются)

И вообще мой совет перед Калашниковым и другими практическими книгами почитать теорию аля Пильщиков В.Н. Assembler (на мой взгляд офигенная книга для начинающего).

зы. Пильщиков ведет в МГУ на ВМиК, так что мужик свой =) Кому надо могу скинуть лекции в печатном виде другого ВМКшного препода по асму, там теория + отличные практические примеры.

KIR@PRO
18.04.2008, 00:10
знающие ассэмблер подскажите пжлста ссылочки на более полные и более понятные учебники по ассэмблеру.... а еще лучше в добавок пару книг которые в магазине найти мона.... а то от монитора тока зрение испорчу...((((( за хорошую книгу плюсиком не обижу.....

z01b
18.04.2008, 00:23
знающие ассэмблер подскажите пжлста ссылочки на более полные и более понятные учебники по ассэмблеру.... а еще лучше в добавок пару книг которые в магазине найти мона.... а то от монитора тока зрение испорчу...((((( за хорошую книгу плюсиком не обижу.....
Лучшая книга по асму это книга Крупника имхо.

http://webfile.ru/1881580

VERte][
18.04.2008, 00:23
чти на 2 поста выше) Пильщиков, Калашников, Пирогов (больше как справочник)

KIR@PRO
18.04.2008, 14:52
а может ктонибудь написать код ассэмблеровский для делфи (там мона вставлять в делфи) который будет умножать..... или откликнитесь люди которые знают и делфи и ассэмблер......

De-visible
18.04.2008, 17:30
Функция для умножения 2 чисел

IMUL - команда умножения
IDIV - команда деления



procedure TForm1.Button1Click(Sender: TObject);
function Umnojenie(x, z: integer): integer;
asm
mov ebx,z
mov eax,x
imul ebx
Mov Result,eax
end;
Begin
ShowMessage(IntToStr(Umnojenie(15,345)));//Возвращает 5 175
end;

DWORD
18.04.2008, 18:01
Manoff брось ты уже Калашникова читать, его книга и рассылка была актуальна лет эдак 12 назад!!!!

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

Скачай уроки изелона с wasm.ru и хотябы что-нибудь из этого списка:

И у тебя возникнет меньше проблем..
Уроки Iczeliona весьма интересный материал для новичков в WinAPI, но никак не как самоучитель по ассемблеру. Мало того что самому ассемблеру там, что естественно и правильно, никакого внимания как языку не уделяется, так там еще и возможности его раскрыты самым минимальным способом.
Мое искреннее убеждение что уроки напрасно написаны на ассемблере - было бы намного удобнее читать их на С, а эффект был бы тем же самым. Впрочем надо сказать что ассемблерный код в силу его наглядного оформления тоже читается хорошо. Но именно из-за наглядности этого кода, смысл выбора языком - ассемблера вообще нивелируется.

Кроме того по WinAPI есть множество вполне неплохих как русскоязычных, так и англоязычных руководств. Некоторые англоязычные руководства хорошо переведены, так что смысл читать Ицзелиона когда есть Сишные альтернативы фактически теряется. Тем более что после усвоения основ логики работы Windows-приложений, лучшим руководством в дальнейшем служит MSDN.

Что же касается самого ассемблера, то изучать его как раз под ДОСом - самое то. Или писать на нем голые консольные приложения/драйвера - тоже нормально. Только в целях обучения. На практике он и здесь уже сдал свои позиции языкам высокого уровня. Писать оконные программы на ассемблере - себя не уважать!

Что касается книг по ассемблеру, которые понравились мне, то это:
Зубков - классная книжка - советую!

Юрова - не читал, но должно быть ничего. Его я обычно использую как простенький справочник.

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

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

Вот это и есть ассемблер, а cmp eax,ebx;jz _label само по себе в оконной процедуре сегодня никому уже ненужно.

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

Если же вы планируете писать на ассемблере полноценные программы или хотя бы и модули, то надо еще ознакомиться с какими-нибудь свежими материалам по оптимизации. Потому что без оптимизации использовать ассемблер для ЭВМ сейчас практически никогда не имеет смысла. А сама оптимизация сильно зависит от реализации конкретной ЭВМ.

KIR@PRO
19.04.2008, 13:43
а правда то что код на ассэмблере выполняется быстрее чем на делфи или си....
домустим для такой цели как перебор хешей md5 код ассэмблера будет работать быстрее? я просто мало то знаю по ассэмблеру начал читать Крупника интересная книга но на ней нумаю не остановлюсь...))) ну дак как всетаки на счет вопроса?

zl0y
19.04.2008, 14:30
а правда то что код на ассэмблере выполняется быстрее чем на делфи или си....
домустим для такой цели как перебор хешей md5 код ассэмблера будет работать быстрее? я просто мало то знаю по ассэмблеру начал читать Крупника интересная книга но на ней нумаю не остановлюсь...))) ну дак как всетаки на счет вопроса?
Вранье,копилятор генерит ассемблерный код,тут уже все зависит от алгоритма.

KIR@PRO
19.04.2008, 18:16
zl0y да я знаю но ведь согласись что в некоторых слуячаях компилятор делфи к примеру довольно таки тупо переводит и код который может уместиться к примеру в 10 строчках умещается в 15 а то и в 20...


но я считаю что каждому из нас обязательно надо, хотябы чуть чуть (основу), знать ассэмблер!!! с ним жизнь станет намного легче (поимите правильно я не имею ввиду все дружно пишем все на асэме я имею ввиду что вообще занимаясь ИТ и не зная ассэмблера понимание немного другое.....))))))) я сам короче запустался)))))))) :-D)

taha
19.04.2008, 19:28
kir@pro, новичку врядли удасться бороться с компилятром Делфи или C++!! Можно оптимизировать процентов на 10 максимум... На самом деле оптимизировать лучше алгоритм...
но я считаю что каждому из нас обязательно надо, хотябы чуть чуть (основу), знать ассэмблер!!! с ним жизнь станет намного легче
конечно, когда ты знаешь во что преобразуется If или While легче на душе)))

Jes
20.04.2008, 01:17
перевел пример из сишного в фасм
call dword [GetCurrentProcessId]

push eax
push TRUE
push PROCESS_OPERATION_AND_WRITE ; 0x0028
call dword [OpenProcess]


mov [pHandle],eax


push 0
push size ;1
push ChangeFor ; 0x74
push WriteHere
push pHandle
call dword [WriteProcessMemory]
add esp,8


WriteHere: JMP short WriteHere
...
0x74 = JZ , размеры совпадают , jz и выполнение продолжается , на Си работает , а тут зацикливается
Где я накосячил?

taha
20.04.2008, 10:23
include 'include\win32ax.inc'
.code
Buffer db 0x74

start:
stdcall [GetCurrentProcessId]

stdcall [OpenProcess],0x0028,TRUE,eax

push NULL ; pBytesWritten = NULL
push 1 ; BytesToWrite = 1
push Buffer ; [Buffer] = 0x74
push WriteHere ; Address of WriteHere
push eax ; hProcess
call [WriteProcessMemory]

WriteHere: JMP WriteHere

.end start

push Buffer ; [Buffer] = 0x74
push eax ; hProcess

Работало, пока не завопил нод и не удалил файл =\\ епанутый какой то =\\

Jes
30.04.2008, 22:05
как такая 'конструкция' в фасме выглядит?
code1 label byte
db 68h
Hooker1 dd 0
db 0c3h

GlOFF
30.04.2008, 22:16
68 00 00 00 00 = push 0
С3 = ret

Если я правильно понел вопрос :)

Jes
30.04.2008, 22:24
в Hooker1 запишется адрес обработчика ,
чтобы затем WriteProcessMemory,-1,[EntryAdress], code1 (без offset прим фасм) ,code1_size,0
а фасм такую директиву (code1 label byte) не принимает :/

desTiny
30.04.2008, 22:28
как такая 'конструкция' в фасме выглядит?
code1 label byte
db 68h
Hooker1 dd 0
db 0c3h
а зачем тебе тут label?
code1:
db 68h
Hooker1:
dd 0
db 0C3h


а дальше культурно как-нибудь так:
mov byte [code1], 0c3h
jmp code1

GlOFF
30.04.2008, 22:33
Тем более аверов и файеров привлекать вызовом WriteProcessMemory. :)
Лишние подозрения

desTiny
30.04.2008, 22:44
Да, кстати, на всякий случай: вот так делать вроде бы нельзя (раньше нелбзя было точно, сейчас, скорее всего, тоже - давненько я таким не занимался :) ):


push code2
mov byte[code1], 0C3h
code1:
push 0
ret
code2:
...

будет ошибка.

Надо так:

push code2
mov byte[code1], 0C3h
jmp code1
code1:
push 0
ret
code2:
...

Ибо у прцессора есть очередь команд, которая сбрасывается только при некоторых командах, например jmp.

GlOFF
30.04.2008, 22:48
desTiny Да от препроцесора зависит. на masm думаю и первый вариант будет норм...

taha
01.05.2008, 07:54
Не знаю как раньше, но сейчас

format PE GUI 4.0
entry start

include 'win32ax.inc'

section '.text' readable writable executable
start:
push code2
mov byte[code1], 0C3h
code1:
push 0
ret
code2:
nop

Работает нормально!

00401000 > 68 0F104000 push testmod.0040100F
00401005 C605 0C104000 C>mov byte ptr ds:[40100C],0C3
0040100C 6A 00 push 0
0040100E C3 retn
0040100F 90 nop
00401010 0000 add byte ptr ds:[eax],al

ZET36
02.05.2008, 11:44
Подскажите пожайлусто где найти список Api функций с как можно подробным описанием и примерами для начинающих

taha
02.05.2008, 11:52
http://msdn.microsoft.com/en-us/library/aa383723(VS.85).aspx

ZET36
03.05.2008, 09:15
Можно привести в пример исходник который открывает файл и выводит его содержимое. Мне для примера что бы узнать как обращаться с функциями.

taha
03.05.2008, 13:57
http://wasm.ru/article.php?article=1001012
http://wasm.ru/article.php?article=1001013

на сколько помню не выводит, но работа с файлами показана

KIR@PRO
05.05.2008, 11:27
может ктонибудь сказать как написать загрузочник для винды.... по виду допустим такой де как у windows xp но всегда с меню.....

и если ктонить даст ссылочки по загрузочникам и их написанию буду очень благодарен...))))

_Great_
05.05.2008, 13:45
взять и написать. перейти в защищенный режим, загрузить ядро в память, Hal, ветки реестра нужные, загрузочные драйвера и проинициализировать все это дело

KIR@PRO
05.05.2008, 16:23
_Great_ ммм это я понимаю я про код говорю...!!!!! ты думаешь еслиб я знал как написать код и не знал как это все идет поп порядку(то что ты обьяснил) я бы стал здесь спрашивать?

_Great_
05.05.2008, 18:40
ты долбанулся такое самому писать?
эта тема вопросы для новичков.. ты с какой башни упал

ЗЫ. ты в первом посте всетаки спросил как написать, а не написать за тебя. или ты так часто меняешь свои слова?

KIR@PRO
06.05.2008, 02:37
ага все понятно....

NorB
09.05.2008, 16:49
push ax
push dx

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

pop dx
pop ax

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

Jes
09.05.2008, 22:51
в статье 'От зеленого к Красному' в примере сплайсинга на масме дан код остановки потоков , перевел в фасм , при call из DllMain функция запуска потоков вылетает с ошибкой ( 0xcКучанулей142) , а при вызова из вне (тестового приложения) всё работает отлично (хотя приложение однопоточное и перехват устанавливается даже без остановки потоков ... но всетаки хотелось бы чтоб правильно работало :/ )...


call dword [GetCurrentThreadId]
mov [CurrTh],eax
call dword [GetCurrentProcessId]
mov [CurrPr],eax

push 0
push 0x00000004

call dword [CreateToolhelp32Snapshot]

cmp eax,INVALID_HANDLE_VALUE
je errHandler


mov [Thread.dwSize],28d ;( 28 = 7(Аргументов) * 4(dword))

push Thread
push h
call dword [Thread32First]
@nextThreadToStart:
mov eax,[CurrTh]
mov edx,[CurrPr]
.if [Thread.th32ThreadID] <> eax
.if [Thread.th32OwnerProcessID] = edx
;{
push Thread.th32ThreadID
push 0 ; FALSE
push 0x0002 ;THREAD_SUSPEND_RESUME
call dword [OpenThread]

mov [ThrHandle],eax
.if eax > 0
push ThrHandle
call dword [ResumeThread]

push ThrHandle
call dword [CloseHandle]
.endif


;}
.endif
.endif

push Thread
push h
call dword [Thread32Next]
cmp eax,0
jne @nextThreadToStart

push h
call dword [CloseHandle]

ret

zl0y
10.05.2008, 14:18
Пиздец.. ну скажите как длину строки вычислить =(((((((((((((((((((((((((
push offset str
call [lstrlen]

или rep scasb

либо мой способ,повторять пока байт не будет равен = 00.

taha
10.05.2008, 14:20
Jes, держи сорц http://pastebin.x3k.ru/388
Исправил ряд детских ошибок на синтаксис, коечто оптимизировал, сделал код читабельным... компелируй

lomerok
16.05.2008, 10:54
Компилирую фаил , выдаёт ошибку :

C:\MASM611\BIN>amake 1ll

C:\MASM611\BIN>ml /c /coff "1ll.asm"
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.

Assembling: 1ll.asm

C:\MASM611\BIN>link /SUBSYSTEM:CONSOLE "1ll.obj"
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : error LNK2001: unresolved external symbol _start
1ll.exe : fatal error LNK1120: 1 unresolved externals

------------------

Код фаила :

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

---------------

что нетак ?

taha
16.05.2008, 12:50
1. код нужно вставлять в теги CODE
2. Для подобных вопросов существует тема https://forum.antichat.ru/thread40850.html
3. раз уж ты всетаки здесь запостил... скинь бат-файл для компиляции, который ты используешь... меня смущает link /SUBSYSTEM:CONSOLE "1ll.obj"
4. после flat запятая

lomerok
16.05.2008, 13:25
ml /c /coff "%1.asm"
link /SUBSYSTEM:CONSOLE "%1.obj"

taha
16.05.2008, 15:58
я уже подзабыл масм, но разве не так?
ml /c /coff 1.asm
link /SUBSYSTEM:CONSOLE /LIBPATH:c:\1.obj

lomerok
16.05.2008, 17:52
Непомогает ....
------
Люди добрые и злые , накачал я кучу книг по асме и чёта както ниодну непонимаю , где команды гдепеременные , неужели я , такой тупой , или увсех так было в начале ...
посоветуйте как мне быть , мож книжку какуюто особенную . пожалусто ..

z01b
16.05.2008, 18:40
Книга посвящена основам программирования на ассемблере в системах Windows и Dos. Знание ассемблера необходимо профессиональному программисту для понимания работы операционной системы и компилятора. Ассемблер позволяет написать программу(или ее часть) так, что она будет быстро выполняться при этом занимать мало места. Это любимый язык хакеров; его знание позволяет менять по своему усмотрению программы, имея только исполняемый файл без исходных текстов. В основу изложения положены короткие примеры на ассемблере MASM фирмы Microsoft, вводящие читателя в круг основных идей языка, знание которых позволяет не только писать простые программы, но и самостоятельно двигаться дальше.

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


Скачать (http://www.proklondike.com/file/Assembler/krupnik_izuchaem_assembler.rar)

KindEcstasy
16.05.2008, 19:16
lomerok
>где команды гдепеременные

Обычно сначала оператор (комманды) потом 2 операнда чере запятую. прим:

MOV AX,BX

MOV - Оператор
AX & BX - Операнды

Переменные - это те которые обьявленны в секции .data (инициализированные) .data?(неинициализированные), а в .const - константы
> неужели я , такой тупой

Строгое замечание!
Нет, ты не тупой. Просто не понял вот и всё. Мы все до единого сначала даже ползать не умели а сейчас бегаем! Вот видишь. Ничё короче страшного в том что ты не понимаешь пока что. Не считай себя тупым никогда. Быть новичком не стыдно, а если какой нить кретин тебя за это будет когда нибудь упрекать - бей в носопырку, пусть юшкой умоется! Короче, удачи в этом деле. Даже самые крутые программисты когда-то тупо сидели и втыкали в талмуды Кнутта с умным видом, но нихера не понимали. Всё приходит со временем.

De-visible:не надо постить подряд, есть кнопка Edit

lomerok
16.05.2008, 20:03
Повторюсь .. Компилирую фаил :

.386
.model flat,stdcall
.code
start:
mov eax, 8
add eax, 8 ;eax = 10???
ret
end start


Выдаёт :


C:\MASM611\BIN>amake 1ll

C:\MASM611\BIN>ml /c /coff "1ll.asm"
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.

Assembling: 1ll.asm

C:\MASM611\BIN>link /SUBSYSTEM:CONSOLE "1ll.obj"
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : error LNK2001: unresolved external symbol _start
1ll.exe : fatal error LNK1120: 1 unresolved externals


Код bat фаила :


ml /c /coff "%1.asm"
link /SUBSYSTEM:CONSOLE "%1.obj"


Вопрос : Что нетак , в чём проблемма ...???

KindEcstasy
17.05.2008, 13:32
lomerok
Ты пытаешься программу под win32 откомпилмит 16 битным компайлером. Распространённая ошибка среди начинающих. Программа написана верно на 100%. Чтобы всё компайлелось нормально - нужно скачать MASM32 (http://www.masm32.com/)

В твоём случае прошрамма должна быть такой:


cseg segment
assume cs:cseg,ss:cseg,es:cseg,ds:cseg
org 100h
begin:
mov eax, 8
add eax, 8 ;eax = 10???
int 20h
cseg ends
end begin


компалеть вот так:

ML.EXE PROG.ASM /AT


Параметр "/AT" указывает ассемблеру что после ассемблирования, в случае, если ошибок нет, следует запустить компоновщик (LINK.EXE) и передать ему параметры для создания файла типа COM. Параметр /AT вводится ЗАГЛАВНЫМИ буквами

x0man
Не стоит так говорить, если одни не помогают - это не значит что и все такие злые и корыстные. И если все форумы - это гомно, хуле вы сидите тогда в этом гомне? =\ фсадкороче =\

NorB
17.05.2008, 17:04
Уря я написал для курсача 2 проги уря)
в итого для вычисления длины строки я юзал ээээ с десяток строк левого кода но вот есть такое:

ReadStr StrHead
mov al, StrHead+1

ReadStr- мой макрос для ввода строки, а вот дальше помешается в al строка +1, тоесть вроде как длина строки. Но вот вопрос как мне потом ей пользоваться, в ax она как бы и нехраниться и тп, карочи я немагу его занести в другие регистры, допустим командой такой:
mov dx, al
так нельзя, но можно так:
mov dl, al
почему нельзя 1 способом?=\
я непойму матиматику обьясните ктото шо тут за матиматика, обьясните как в каком формате там записана длина строки, в al и тд...?=(

desTiny
17.05.2008, 17:35
Уря я написал для курсача 2 проги уря)
в итого для вычисления длины строки я юзал ээээ с десяток строк левого кода но вот есть такое:

ReadStr StrHead
mov al, StrHead+1

ReadStr- мой макрос для ввода строки, а вот дальше помешается в al строка +1, тоесть вроде как длина строки. Но вот вопрос как мне потом ей пользоваться, в ax она как бы и нехраниться и тп, карочи я немагу его занести в другие регистры, допустим командой такой:
mov dx, al
так нельзя, но можно так:
mov dl, al
почему нельзя 1 способом?=\
я непойму матиматику обьясните ктото шо тут за матиматика, обьясните как в каком формате там записана длина строки, в al и тд...?=(

movz так умеет..

а можно
xor dh, dh
mov dl, al; dx=al

lomerok
17.05.2008, 20:22
To KindEcstasy:
Вот что выдалось ...:


C:\MASM611\BIN>ML 1ll.asm /AT
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.

Assembling: 1ll.asm
1ll.asm(5): error A2085: instruction or register not accepted in current CPU mode
1ll.asm(6): error A2085: instruction or register not accepted in current CPU mode

Устанавил masm32 , всё заработало ....
Всем спасибо ....
Особенно KindEcstasy...

KindEcstasy
18.05.2008, 04:28
lomerok
потому что используются 32 битные регистры eax, нужно заменить на ax

ZET36
22.05.2008, 02:14
Можно пожайлусто привести в пример исходник который читает содержимое из текстового файла и выводит его содержимое в мессадж боксе

GlOFF
22.05.2008, 02:22
ZET36 Я бы посоветовал начать с простого САМОУЧИТЕЛЯ Assembler.
Книги можно взять тут -> forum.antichat.ru/thread31398.html

ASERVIC
26.05.2008, 00:51
Подскажите кто-нибудь, где можно почитать про структуры данных Bios и Dos? И где можно узнать про состав, назачение и длину данных в Ms-dos

Jes
26.05.2008, 01:19
2 > ASERVIC
[cod e][/cod e]

ASERVIC
26.05.2008, 06:50
А можно поподробнее, пожалуйста?..

alextoun
04.06.2008, 11:58
1)
Пусть задан текст, представляющий собой последовательность строк.
На каждой строке находится имя, фамилия и отчество.
Распечатать отчества по алфавиту,
а также текст, содержащий строки, состоящие только из имен и фамилий.
*Распечатать = вывести на экран.



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



3)
Пусть файл содержит результаты измерений
температуры воздуха, которые проводились ежедневно весь декабрь. Определить и записать в создаваемый новый файл: среднемесячнуу температуру декабря, сколько раз (дней) была выше нуля, самый холодный день декабря, самый теплый день, сколько раз температура в декабре меняла знак.
блин можете кто-нибудь сделать

Jes
04.06.2008, 13:45
alextoun -> fasm , masm ? (можно msvcrt подключить и через переходники всё резко упростится)

desTiny
04.06.2008, 14:10
alextoun -> fasm , masm ? (можно msvcrt подключить и через переходники всё резко упростится)
Без msvcrt тут за*бёшься...
alextoun, тебе куда такие занудные программы нужны?

PS Если до того момента, как я освобожусь, никто не поможет, то напишу чё-нть...

alextoun
04.06.2008, 15:05
Tasm
alextoun, тебе куда такие занудные программы нужны?
а ты угадай :)

desTiny
04.06.2008, 20:59
Tasm
???
Тебе что, под дос надо? через прерывания?? А кто их сейчас помнит?... Изващение...

0verbreaK
04.06.2008, 21:09
???
Тебе что, под дос надо? через прерывания?? А кто их сейчас помнит?... Изващение...

Не помнят, но юзают интерапт лист.

desTiny
04.06.2008, 21:15
Не помнят, но юзают интерапт лист.
блин, я правда уже ничего оттуда не помню... и в интеррапт листе тоже искать что бы то ни было весьма занудно... а галавное - непонятно зачем!
я помню только
mov ah, 4Ch
int 21h
Конечно, многое там через int 21, но как выводить вещественные числа - только используя последовательные div'ы? или есть что-нть из интов?

Кстати, напомните кто-нибудь, что там в тасме с математическим сопроцессором?

0verbreaK
04.06.2008, 21:27
Кстати, напомните кто-нибудь, что там в тасме с математическим сопроцессором?

Не понятен вопрос, тебя интересуют математические команды сопроцессора?

desTiny
04.06.2008, 21:34
Не понятен вопрос, тебя интересуют математические команды сопроцессора?
в смысле он там реализован или нет? Эх... плохо я помню историю...

desTiny
04.06.2008, 22:21
Так, третья задачка без ввода-вывода (писал в блокноте, идея такая, но могут быть ошибки синтаксиса):

переменные:
temp dw ?
max dw ?
min dw ?
pos dw ?

код:
//тут читаем temp
mov cx, temp
mov pos, 0
xor di,di; дней со сменой знака
mov dl, 2; температура минусовая - 1, плюсовая - 0, Ноль - 2
xor ax, ax
mov max, temp
mov min, temp

cmp temp, 1
jge sk
cmp temp, 0
jz circle;
mov dl, 1
jmp circle
sk:
inc pos
mov dl, 0
jmp circle

circle:
inc ax
cmp ax, 31; 0..30 - 31 день
jz exit
//тут читаем temp
add cx, temp
cmp temp, min
jge mm
mov min, temp
mm:
cmp temp, max
jle mm1
mov max, temp
mm1:
cmp temp, 1
jl mm2
inc pos
mm2:
cmp temp, 0;
jz circle; ноль нам не интересен

mov dh, dl;запоминаем предыдущий знак

jg sk3
;меньше нуля
mov dl, 0
jmp sk4
sk3:
;больше нуля
mov dl, 1;

sk4:
cmp dh, 2;пока только нули
jz circle

cmp temp, 0;
jg sk2
;меньше нуля
cmp dh, 0; предыдущий +
jnz circle
inc di
sk2:
;больше нуля
cmp dh, 1; предыдущий -
jnz circle
inc di
exit:

;cx-сумма температур
;di - дней со сменой знака
;max - наиб. температура
;min - наим. температура
;pos - температура болше нуля

PS я считал, что "-10, 0, 0, -5" знак температуры не меняется

NetSter
06.06.2008, 04:08
Нужен совет знающих людей.
Вопрос о видеосервисе VGA (он же находится в прерываниях BIOS 10h), номер функции 11h.
как я заранее понял в этой функции есть 4 подфункции. (по ходу которые отвечают за установку видеопараметров)
вот часть кода программы, (которая создает и загружает свой символ в знакогенератор) что устанавливает видеоадаптер в какой нить режим (здесь в 3-ий):

--------
mov ah,0
mov al,3
int 10h
--------
собственно вопрос:
1) правильно ли осуществляется переключение видеоадаптера в 3-ий режим?
2) дайте подробное описание других режимов и особенности их применения

ps/ немного знаю о нулевой функции (al = 0), при использовании которой данные определенные программистом переносятся с памяти в спец блок символов.
Заранее спасибо.

iv.
06.06.2008, 05:44
2NetSter:
Прерывание INT 10H обеспечивает управление всем экраном. В регистре AH устанавливается код, определяющий функцию прерывания. Команда cохраняет содержимое регитров BX, CX, DX, SI и BP. Ниже описывается все возможные функции.

AH=00: Установка режима. Данная функция позволяет переключать цветной монитор в текстовый или графический режим. Установка pежима для выполняемой в текущий момент программы осуществляется c помощью INT 10H. При установке происходит очистка экрана. Содержимое регистра AL может быть следующим:

00 40 х 25 черно-белый текстовый режим
01 40 х 25 стандартный 16-цветовой текстовый режим
02 80 х 25 черно-белый текстовый режим
03 80 х 25 стандартный 16-цветовой текстовый режим
04 320 х 200 стандартный 4-цветовой графический режим
05 320 х 200 черно-белый графический режим
06 640 х 200 черно-белый графический режим
07 80 х 25 черно-белый стандартный монохромный
08 - 0A форматы для модели PCjr
0D 320 х 200 16-цветовой графический режим (EGA)
0E 640 х 200 16-цветовой графический режим (EGA)
0F 640 х 350 черно-белый графический режим (EGA)
10 640 х 350 64-цветовой графический режим (EGA)

EGA (Enhanced Graphics Adapter) - обозначает усовершенствованный графический адаптер. Следующий пример показывает установку стандартного 16-цветового текстового режима

MOV AH,00 ;Функция установки режима
MOV AL,03 ;Стандартный цветной текст 80 х 25
INT 10H ;Вызвать BIOS

lm137
07.06.2008, 18:57
Только начал изучать, 2 глупых вопроса.
1)Зачем нужен отладчик?
Если для проверки написанного, то, что бы я не писал он выдает однои то же Unknow command
Например пробовал присвоение регистру ах
mov ax,10h
ну или mov ax,0Ah

и

2)Вопрос, как сохранить программу в MS-DOS..?

ПС на форуме поиск юзал, скожих тем\сообщений не нашел..)

taha
07.06.2008, 19:05
прочитав вопросы уместно будет спросить:
а ты с помощью чего(какого отладчика) и что отлаживаешь(com, exe, dll)?
меня смущает: сохранить программу в MS-DOS

ЗЫ: в гугл вбей: "Что такое отладчик?"

lm137
07.06.2008, 19:09
прочитав вопросы уместно будет спросить:
а ты с помощью чего(какого отладчика) и что отлаживаешь(com, exe, dll)?
меня смущает:

Прочитав вопросы уместно будет ответить на них, т.к. тема для новичков, а новичок здесь - я.
Спрашивать у новичка про то, о чем он не знает - не поддается логики.

Представь, что я в 1м классе а ты в 9м, и спрашиваешь у меня как решать логорифмы,ога?

Жду адекватных постов..

Ну или сам разберусь.

Кстати, "только начал изучать" - имеется ввиду, что читаю Ассемблер для чайников - 4-5часов.
Тебе это о чем нибудь говорит,нет?

ЗЫ: в гугл вбей: "Что такое отладчик?"

ЗЫ: В гугл вбей: "мозг - как часть организма."

taha
07.06.2008, 19:16
1) Ты пишешь, что написал простейшую программу, которая кладет в регистр AX 10h! Попытался открыть её с помощью отладчика! А он пишет, что комманда неизвестна! Вот я и спрашиваю: "Что за отладчик ты используешь!"

2)
>>Вопрос, как сохранить программу в MS-DOS..?
Я не понимаю вопроса! Может быть ты хочешь скомпилировать программу в *.com!?

Следую банальной логике, ты мог отрыть только OllyDbg! А она отлаживает только 32bit программы тоесть EXE, а не COM!

Вот я и задаю вопросы какого хера ты делаешь... Чтоб объяснить что ты делаешь не так!

ЗЫ: В гугл вбей: "мозг - как часть организма."
не груби мне! я те помочь пытаюсь между прочем! не*** тупые вопросы задавать, на которые можно без труда ответы найти!

0x0c0de
07.06.2008, 19:18
Лучше не трогай MS-DOS и вообще сразу начинай с винды... Потому дос - это уже все муть практически ненужная (мое имхо). читаем

http://wasm.ru/publist.php?list=1

Отладчик - ollydbg. Самое то.

http://ollydbg.de/

Ну и в реверсинг почаще заглядывай. там на эту тему инфы полно

desTiny
07.06.2008, 19:19
Прочитав вопросы уместно будет ответить на них, т.к. тема для новичков, а новичок здесь - я.
Спрашивать у новичка про то, о чем он не знает - не поддается логики.

Представь, что я в 1м классе а ты в 9м, и спрашиваешь у меня как решать логорифмы,ога?

Жду адекватных постов..

Ну или сам разберусь.

Кстати, "только начал изучать" - имеется ввиду, что читаю Ассемблер для чайников - 4-5часов.
Тебе это о чем нибудь говорит,нет?



ЗЫ: В гугл вбей: "мозг - как часть организма."
По-моему, ты хамеешь...

lm137
07.06.2008, 19:22
Сорри, ща просто сессия.. по 8ч. занятия, крыша едет. х_Х
Прога AFD pro.
Программу для начала хочу в MS-DOS сохранить, что бы проверить на работоспособность

Так отладчик нужен для перевода в разные расширения или для проверки на предмет ошибок?

lm137
07.06.2008, 19:27
Лучше не трогай MS-DOS и вообще сразу начинай с винды... Потому дос - это уже все муть практически ненужная (мое имхо). читаем

http://wasm.ru/publist.php?list=1

Отладчик - ollydbg. Самое то.

http://ollydbg.de/

Ну и в реверсинг почаще заглядывай. там на эту тему инфы полно

Спасибо большое..
Ща полазию.

ntldr
07.06.2008, 23:38
1 раз юзаю ассемблер))

у меня была функция которая ксорит строчку по 1 букве.
это была она.
function encrypt(str:pchar; len,key:integer):pchar;
var i:integer;
begin
for i:=0 to len do
begin
str[i]:=Chr(Ord(str[i]) xor key);
end;
result:=str;
end;

а это я пытался ее переписать на асме:
function encrypt(str:pchar; len,key:integer):pchar;assembler;
asm
mov ecx,0
@loop:
mov eax,str[ecx]
xor eax,key
mov str[ecx],eax
inc ecx
cmp ecx,len
jne @loop

end;

у меня вопрос - что не правильно?) я понимаю, что все, но можно конкретные ошибки выделить тут?

//Delphi

BlackSun
08.06.2008, 01:00
mov eax,str[ecx]
Че за .. ?)))

Чтобы прохорить байт:
mov eax, offset
xor byte ptr [eax], you_key

zl0y
08.06.2008, 03:06
procedure encrypt(str:pchar; len:integer;key:byte);
asm
pushad
mov ebx,str
mov ecx,len
mov eax,key
@cycle:
xor byte[ebx],al
inc eax
loop @cycle
popad
end;

desTiny
08.06.2008, 10:55
procedure encrypt(str:pchar; len:integer;key:byte);
asm
pushad
mov ebx,str
mov ecx,len
mov eax,key
@cycle:
xor byte[ebx],al
inc eax
loop @cycle
popad
end;
По-моему, там какая-то ботва была передаваемыми параметрами... В делфе не помню, но в BP7.0 точно надо было пиать
типа так:
function ttt(a, b:integer);
var
a1, b1: integer;
begin
a1 := a;
b1 := b;
//а в асме уже с а1 и б1 работать...

0verbreaK
08.06.2008, 13:29
Надо знать почему и как что возникает, попробуй скомпилировать пример своего кода:


function encrypt(str:pchar; len,key:integer):pchar;assembler;
asm
mov ecx,0
@loop:
mov eax,str[ecx]
xor eax,key
mov str[ecx],eax
inc ecx
cmp ecx,len
jne @loop

end;


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

А под ДОС (имхо) надо программировать, и отладчик поюзать типа TASM+TD, хорошо развивает, на примере: Калашникова - уроков 10-12 и все.

desTiny
08.06.2008, 15:01
Надо знать почему и как что возникает, попробуй скомпилировать пример своего кода:


function encrypt(str:pchar; len,key:integer):pchar;assembler;
asm
mov ecx,0
@loop:
mov eax,str[ecx]
xor eax,key
mov str[ecx],eax
inc ecx
cmp ecx,len
jne @loop

end;


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

А под ДОС (имхо) надо программировать, и отладчик поюзать типа TASM+TD, хорошо развивает, на примере: Калашникова - уроков 10-12 и все.

а дельта-то тут причём??

0verbreaK
08.06.2008, 21:54
а дельта-то тут причём??

Я кусок сообщения удалил, а это оставил.

PS. По твоему для дельты не нужен отладчик? Я имел ввиду, что для всего оссобенно для работы со стеком нужно использовать отладчик.



start:
Call _Delta

_Delta:
sub dword ptr [esp], offset _Delta

ntldr
14.06.2008, 22:01
mov ah,09h
mov dx,mesag
int 21h
mov ah,07h
int 21h
mov ah,4ch
int 21h
int 20h

mesag db 'OMG$'

Мне выводит
♦V☺4♦4♦☺☺☺ ☻***************H♣ц*Т♣¶ ↑ Т♣**** ♣ ═!╦
┤ ║◄ ═!┤═!┤L═!═ OMG
где ошибка?

Delimiter
14.06.2008, 22:28
lea dx,mesag


mesag db 'OMG$',0

z01b
14.06.2008, 23:22
lea dx,mesag


mesag db 'OMG$',0
или mov dx, offset mesag :)

Delimiter
14.06.2008, 23:34
2 zo1b
угу! 8)))

Ded MustD!e
15.06.2008, 01:23
Объясните мне плиз, что делает этот кусок кода посредине программы на паскале)

Чем подробнее, тем лучше, желательно каждую строчку)


Procedure Rotate(D:integer; Var X,Y:integer);
Var C,S:integer;
X1,Y1:longint;
begin
if ((X=0) and (Y=0)) or (D=0) then exit;
asm
mov AX,D
mov BX,360
xor CX,CX
@m1:sub AX,BX
cmp AX,CX
jnl @m1
@m2:add AX,BX
cmp AX,CX
jl @m2
mov BX,90
@m3:cmp AX,BX
jl @m4
sub AX,BX
inc CX
jmp @m3
@m4:sub BX,AX
shl AX,1
shl BX,1
Test CL,1
jz @m5
xchg AX,BX
@m5:mov SI,AX
mov AX,word PTR TableCos[SI]
mov C,AX
mov AX,word PTR TableCos[BX]
mov S,AX
cmp CL,1
jl @ex
jg @m6
@m7:neg C
jmp @ex
@m6:neg S
cmp CL,3
jl @m7
@ex:end;
X1:=longint(X);
Y1:=longint(Y);
X:=(X1*C-Y1*S) shr 14;
Y:=(X1*S+Y1*C) shr 14;
end;

Delimiter
15.06.2008, 01:30
табличное определение синуса и косинуса, делается вместо вычисления ,для уменьшения количества тактов процессора для данных процедур....

угол дается в градусах... вычитая по 360 нормируем до индекса

mov AX,D ;угол в D
mov BX,360
xor CX,CX ;обнуление
@m1:sub AX,BX
cmp AX,CX
jnl @m1


в итоге в ax значение не превышающее 360 градусов
операция не искажающая значения синуса и косинуса

далее начинаю вычитать квадранты, видимо таблица содержит не все 360 градусов
mov BX,90
@m3:cmp AX,BX
jl @m4
sub AX,BX
inc CX
jmp @m3

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

... само взятие и запоминание в переменных
mov AX,word PTR TableCos[SI]
mov C,AX
mov AX,word PTR TableCos[BX]
mov S,AX

Ded MustD!e
15.06.2008, 01:55
поясни пожалуйста строчку "вычитая по 360 нормируем до индекса", и что такое квадранты?

Delimiter
15.06.2008, 01:58
ну к примеру 760 градусов .... вначале вычитаю
400=760-360
операция не изменяет значение синусов и косинусов
-40=400-360
а вот угол -40 уже устраивает нас

квадрант - это область получающаяся при делении плоскости прямыми X и Y.... их 4-ре штуки

в угловом эквиваленте квадрант = 90 градусов

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


/// если предстоит защита то посмотри матрицу поворота в инете полно описаний

ntldr
15.06.2008, 19:26
mov dx,stroka+100h ;fasm не знает что такое lea/offset
xor bx,bx
mov ah,09h
int 21h ;нормально выводит строку
xor ax,ax

mov cx,5 ;первые 5 букв
mov si,stroka+100h

@cy:lodsb ;буква из stroka -> аккумулятор
mov [string+100h],al ; тут он пытается записать букву из stroka в string
loop @cy

xor ax,ax
mov dx,string+100h
mov ah,09h
int 21h ;тут он выводит бред
int 20h

stroka db 'aldaskjfahslkdjahlsjdh',13,10,'$',0
string db 80 DUP(?)

Программа должна вывести сначал переменную stroka, она ее выводит, а затем должна перегнать ее в переменную string и вывести, но похоже прогша ее тупо не записывает в string.
Возможно ли через stosb?

//fasm

получилось так:

mov cx,5
mov si,stroka+100h
mov di,string+100h

@cy:lodsb
stosb
loop @cy

...................

string db '0000000000000000000000',13,10,'$',0

вопрос: как правильно будет через string dup (?)

FoX's
15.06.2008, 19:43
исп. movsb

0verbreaK
15.06.2008, 23:40
Очевидно, что на stroka надо передать смещение в


mov dx,string+100h


из руководства по fasm


lea dx,[bx+si+1] ; load effective address to dx


ntldr в официальном мануале все функции описаны, очевидно
проблема в не понимании именно синтаксиса фасма.

руководство на русском
http://www.wasm.ru/baixado.php?mode=doc&id=133

ntldr
29.06.2008, 23:50
Почему-то не отправляет пакет
должен по идее отправлять на 127.0.0.1:80
и еще ответ принимать

format PE GUI 4.0
entry start

include 'INCLUDE\win32ax.inc'

section '.data' data readable writeable
sock dd ?
wsa WSADATA ;
sin sockaddr_in ;
hinstance dd ?
http db '127.0.0.1',0
buf_sz =100h
buf rb buf_sz
ht db 'luboi paketeng',13,10,13,10,0

section '.code' code readable executable
start:
invoke MessageBoxA,0,'asd','asd',0
invoke WSAStartup,101h,wsa
cmp eax,0
jne @exit
mov [sock],eax
invoke inet_addr,http
mov [sin.sin_addr],eax
mov [sin.sin_family],AF_INET
invoke htons,80
mov [sin.sin_port],ax
invoke connect,[sock],sin,10h
test eax,eax
jz @exit

invoke send,[sock],ht,26,0
invoke recv,[sock],buf,buf_sz,0
repnz

invoke MessageBoxA,0,'yghjk',buf,0
@exit:
invoke ExitProcess,0


section '.idata' import data readable writeable
library user32,'USER32.DLL',kernel32,'KERNEL32.DLL',wsock, 'WS2_32.DLL'

import user32,MessageBoxA,'MessageBoxA'

import kernel32,ExitProcess,'ExitProcess'

import wsock,WSAStartup,'WSAStartup',socket,'socket',recv ,'recv',connect,'connect',send,'send',inet_addr,'i net_addr',htons,'htons'

0verbreaK
30.06.2008, 00:40
А где ты создаешь сокет


SOCKET socket (

int af,
int type,
int protocol
);






invoke socket, AF_INET, SOCK_STREAM, 0
.if eax == INVALID_SOCKET
invoke MessageBox 0, 'Could not create socket', 'Error', MB_ICONWARNING
mov eax, INVALID_SOCKET ; return error
ret
.endif
mov [sock], eax




import user32,MessageBoxA,'MessageBox'

ntldr
03.07.2008, 02:51
есть код -
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,2424
invoke CreateRemoteThread,eax,0,0,mes,0,0

proc mes
invoke MessageBoxA,0,'','',0
leave
retn
endp

по идее должен создавать удаленный поток с процессом у которого pid=2424, и выводить месагебокс. но вместо этого фаталэррор. В чем проблема может быть?

0verbreaK
03.07.2008, 03:02
PID (Process Identifier) - после каждого запуска менятся.

По этому вот здесь PID!=2424

invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,2424


Можешь привести полный код или программку.

12l
03.07.2008, 07:09
Можете дать исходник антивируса на delphi 7 ( жилатильно с каминтариями )

GALIAFF
03.07.2008, 07:55
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,2424
invoke CreateRemoteThread,eax,0,0,mes,0,0
а VirtualAlloc/WriteProcessMemory забыл?

ntldr
03.07.2008, 11:44
а VirtualAlloc/WriteProcessMemory забыл?
скорее не забыл а не знал

Вот полный код. чисто тестовая прога
format PE GUI 4.0
entry start

include 'INCLUDE/win32ax.inc'


section '.code' code readable executable
start:
invoke OpenProcess,PROCESS_ALL_ACCESS or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD or PROCESS_CREATE_PROCESS,FALSE,1908 ;1908 - тут пид любого процесса. когда я тестил у оперы был такой пид
invoke CreateRemoteThread,eax,0,0,mes,0,0

invoke ExitProcess,0

proc mes
invoke MessageBoxA,0,'','',0
leave
retn
endp

section '.idata' import data readable writable

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

import user32,MessageBoxA,'MessageBoxA'

import kernel32,CreateRemoteThread,'CreateRemoteThread',O penProcess,'OpenProcess',ExitProcess,'ExitProcess'

o3,14um
03.07.2008, 13:50
Помогите найти ДОКИ, чтобы подробно понять архитектуру процессора. Начинаю изучать асм - пока тяжело даётся. Ещё было бы неплохо, если бы статей подкинули интересных.
всё кто откликнется - огромное спасибо!

0x0c0de
03.07.2008, 13:54
>>Помогите найти ДОКИ, чтобы подробно понять архитектуру процессора. Начинаю изучать асм - пока тяжело даётся. Ещё было бы неплохо, если бы статей подкинули интересных.
всё кто откликнется - огромное спасибо!


http://wasm.ru/publist.php?list=11

И вообще весь васм)

0verbreaK
03.07.2008, 15:11
1) Открываем процесс

invoke OpenProcess,PROCESS_ALL_ACCESS or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD or PROCESS_CREATE_PROCESS,FALSE,PID


2) Выделяем память в чужом процессе


invoke VirtualAllocEx, Process, NULL, size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
mov zzz, eax


3) Копируем память в процесс

invoke WriteProcessMemory, Process, zzz, Memory, size, BytesWritten


4) Создаем удаленный поток


invoke CreateRemoteThread, hProc, NULL , 0 , pfnStatAddr, szPathtoDLL, 0, NULL


Внедряем библу DLL, в которой и находится твой
внедряемый код


proc mes
invoke MessageBoxA,0,'','',0
leave
retn
endp

ntldr
03.07.2008, 15:53
спасибо, а без dll нельзя так?

0verbreaK
03.07.2008, 16:07
// Ошибся здесь

; -=-=-=-=-=-=-=-=-=-=-=-=-=-
; Code injection in FASM
; Created by Ct757
; -=-=-=-=-=-=-=-=-=-=-=-=-=-
;
; Use FASM to compile this shit


format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'


section '.code' code readable writeable executable


target_name db 'explorer.exe',0


;...............[INJECT CODE]..................;

remote_thread:

call .delta
.delta:
pop ebp
sub ebp,.delta

xor esi,esi

lea eax,[ebp+_user32]
push eax
call [ebp+pLoadLibrary]

push esi
lea eax,[ebp+_title]
push eax
lea eax,[ebp+_message]
push eax
push esi
call [ebp+pMessageBox]

ret

.data:

pMessageBox dd 0
pLoadLibrary dd 0

_user32 db 'USER32.DLL',0
_message db 'Hello world!',0
_title db 'Injected',0

thread_end:

;...............[END INJECT CODE]..............;

p_ent PROCESSENTRY32

find_target:
xor esi,esi

.shot:
mov [p_ent.dwSize],sizeof.PROCESSENTRY32
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi
inc eax
je .not_found
dec eax
xchg eax,edi

invoke Process32First,edi,p_ent

.next_prc:
xchg eax,ecx
jecxz .not_found

invoke lstrcmpi,p_ent.szExeFile,target_name
xchg eax,ecx
jecxz .found

invoke Process32Next,edi,p_ent
jmp .next_prc

.found:
invoke CloseHandle,edi
mov eax,[p_ent.th32ProcessID]
ret

.not_found:
xor eax,eax
ret

inject_code:
xor esi,esi
invoke OpenProcess,PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_CREATE_THREAD,esi,eax

xchg eax,ecx
jecxz .exit

xchg ecx,edi

invoke VirtualAllocEx,edi,esi,thread_end-remote_thread,MEM_COMMIT,PAGE_READWRITE
xchg eax,ecx
jecxz .close_h

xchg ecx,ebp

invoke WriteProcessMemory,edi,ebp,remote_thread,thread_en d-remote_thread,esi

dec eax
test eax,eax
jnz .close_h
inc eax

invoke CreateRemoteThread,edi,esi,esi,ebp,ebp,esi,esi

.close_h:
invoke CloseHandle,edi

.exit:
ret

get_apis:
mov edi,[LoadLibrary]
mov [pLoadLibrary],edi

mov edi,[MessageBox]
mov [pMessageBox],edi

ret

start:
call find_target
test eax,eax
je .exit

call get_apis

call inject_code

.exit:
push 0
call [ExitProcess]


section '.idata' data import readable

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

include '%fasminc%\APIA\kernel32.inc'
include '%fasminc%\APIA\user32.inc'

*CHEL*
04.07.2008, 06:02
Просто так вывести нельзя. так число - это не строка.
Поэтому нужно перевести из числа в строку. Можно сделать это вручную, но лучше юзать API функцию.
Вот код на FASM. Выводит содержимое регистра.

format PE GUI
entry _start
include 'd:\coding\fasm\include\win32ax.inc'
include 'd:\coding\fasm\include\encoding\win1251.inc'
include 'd:\coding\fasm\include\apia\user32.inc'
section '.data' data readable writeable
formats db "%d",0
zagolovok db "Содержимое регистра",0
temp db 256 dup(?)
section '.code' code readable executable
_start:
mov eax,-1234568
invoke wsprintf,temp,formats,eax
invoke MessageBox,0,temp,zagolovok,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
include 'd:\coding\fasm\include\apia\kernel32.inc'


wsprintf сишная функция и ответственность за выравнивание стека не несёт.
Вызывающая программа сама должна его выравнивать (add esp,PushedSize где PushedSize колво байт, переданных через стек проге).

В FASM'e для вызова сишных функций существует макрос cinvoke

Jes
08.07.2008, 01:38
и снова я с косяками:

хочу вывести exe имя процесса(любого) в консоль

process32First и Next
в упор не заполняет структуру
возвращяет что записал,а в odbg видит- пусто :(

fasm
push 0
push 0x00000002
call dword [CreateToolhelp32Snapshot]
mov [SnapHandle],Eax

mov [ProcBuffer.size],4*9+255

push ProcBuffer
push [SnapHandle]
call dword [Process32First]


push ProcBuffer
push [SnapHandle]
call dword [Process32Next]


push 0
push 0
push 255
push ProcBuffer.exeFile
push [StdOutputHandle]
call dword [WriteConsoleA]

section '.data' data readable writeable

struc PROCESSENTRY32
{
.size dd 4*9+255
.usage dd ?
.processID dd ?
.defaultHeapID dd ?
.moduleID dd ?
.threads dd ?
.parentProcessID dd ?
.priClassBase dd ?
.flags dd ?
.exeFile db 255 dup(?)
}
ProcBuffer PROCESSENTRY32
полный исходник пример (http://stalker-zone.info/jes/001.ASM.txt)

desTiny
08.07.2008, 20:43
Jes, что-то у тебя какое-то извращение идёт...
воТ код на cpp, переделать его в асм нетрудно:

TCHAR Name[MAX_PATH];
int pid = 4;//pid Процесса
HANDLE p = OpenProcess(PROCESS_QUERY_INFORMATION, false, pid);
GetModuleFileNameExW(p, 0, Name, MAX_PATH);
CloseHandle(p);
_putts(Name); //единственная не-апишка на выводе.


Чистый апи, так что разберёшься ;)

Add: Ай, забыл закрытия дескриптора.. не бейте меня! :rolleyes:

Jes
08.07.2008, 20:55
не , мне как раз все процессы нада просмотреть (скорее всего поочередно) , хотябы через тулхэлп ...
, а хотя , во ,лучше через NtQuerySystemInformation попробую , а затем exe по pid'у как в примере...
ps: anyway , thanks

desTiny
08.07.2008, 21:12
не , мне как раз все процессы нада просмотреть (скорее всего поочередно) , хотябы через тулхэлп ...
, а хотя , во ,лучше через NtQuerySystemInformation попробую , а затем exe по pid'у как в примере...
ps: anyway , thanks
хошь на cpp дам исходник по проверке всех процессов и определению заметных через NtQuerySystemInformation?

вот: http://webfile.ru/2075644
пасс: Jes

xGOR
15.07.2008, 20:32
Всем привет.

Я тут немного асм начал... ну понимаете. Ошибка какаето вылезла. Немогу скомпилить. Скачал масм. версия: "Macro Assembler Version 6.14.8444 & Incremental Linker Version 5.12.8078".


http://www.valar.ru/tm2/0708/error.jpg
(http://www.valar.ru/upload/jpg/0708/error.htm)

z01b
15.07.2008, 20:47
Всем привет.

Я тут немного асм начал... ну понимаете. Ошибка какаето вылезла. Немогу скомпилить. Скачал масм. версия: "Macro Assembler Version 6.14.8444 & Incremental Linker Version 5.12.8078".


http://www.valar.ru/tm2/0708/error.jpg
(http://www.valar.ru/upload/jpg/0708/error.htm)
дай исходник асм файла

xGOR
15.07.2008, 20:50
дай исходник асм файла
Да здесь типа программа "Хелло ворд".


CSEG segment
org 100h

Begin:

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

int 20h

Message db 'Hello, world!$'

CSEG ends
end Begin

izlesa
15.07.2008, 22:55
линкуй линкером который в папке binr (при установке необходимо указать что нужно ставить и winNT и win9x версии) находится. Мне это помогло.
У мну трансляторолинкер ml.exe сразу после переноса линкера из binr подхватил его самостоятельно.
Если не подхватит транслируй с опцией /c
и линкуй руками, чтобы получить .com, линкуй с опцией /t

btw, имхо под рассылку Калашникова лучше использовать TASM - проблем меньше будет ^____^

z01b
16.07.2008, 00:00
ml.exe hello.asm /AT - по идее должен работать
ЗЫ Конпелятор должен быть 6.11-6.13, т.к. компоновщик должен быть 16-битным

xGOR
16.07.2008, 12:03
ЗЫ Конпелятор должен быть 6.11-6.13
А чем 6.14 плох?

izlesa
17.07.2008, 12:11
2xGOR
ничем, он наверное имел ввиду что masm < 6.11 использует masm.exe и link.exe
а версии => 6.11 так как выше написано было через ml.exe

*Van*
24.07.2008, 04:40
скачай asmed - полезная штука, и с компилятором проблем не будет, и удобно

izlesa
28.07.2008, 10:16
туплю не подецки

bl = 1Ah, al = 69h

div bl

ax = 104h

Почему? должно быть 4?

ЗЫ ступил. там ведь остаток в ah?

iv.
28.07.2008, 11:42
ЗЫ ступил. там ведь остаток в ah?

Деление "слова на байт". Делимое находится в регистре AX,
а делитель - в байте памяти или а однобайтовом регистре.
После деления остаток получается в регистре AH, а частное -
в AL. Так как однобайтовое частное очень мало (максимально
+255 (шест.FF) для беззнакового деления и +127 (шест.7F) для
знакового), то данная операция имеет ограниченное
использование.

(с) ассемблер абель

-=Vlad=-
01.08.2008, 14:23
объясните компилятор подбирают по разрядности процессора или по разрядности ОС.
например у меня Amd +64

slesh
04.08.2008, 13:16
Бери Fasm обычный 32-х битный под винду.
В любом случае он будет поддерживаться 32\64-битными процами\ОС
А там уже в самом фасме при компиляции проги выберишь под что компилить

-=Vlad=-
04.08.2008, 20:26
благодарю,ни где толком не написано

metaldisc
06.08.2008, 20:43
что подключать в фасме, чтобы не прописывать вручную импортируемые функции

w_2k
06.08.2008, 23:34
Приветствую! Кто может дать пример перехвата прерывания(желательно комментированый), а то теоретически понимаю как, а написать проблема...

0verbreaK
07.08.2008, 02:37
w_2k можешь подробнее DOS или Windows

zl0y
07.08.2008, 02:43
w_2k можешь подробнее DOS или Windows
А в винде прерывания разве есть?

что подключать в фасме, чтобы не прописывать вручную импортируемые функции
include '..\..\include\win32ax.inc'
.code
start:
invoke MessageBox,0,0,0,0
invoke ExitProcess,0
.end start

0verbreaK
07.08.2008, 02:58
zl0y int 2eh

zl0y
07.08.2008, 05:56
zl0y int 2eh
Вобще то это не виндовое sysenter никаким боком не относиться к ней,в винде все сделанно посредством хуков.
тыб еще сказал out или int 21 :)

w_2k
07.08.2008, 11:58
Под ДОС:)

Juda
07.08.2008, 23:25
как скрыть вызов АПИ ф-и?

пробовал использовать метод Криса(masm32):
------------------------------------------
пример вызова MessageBox
.data
lib db "user32.dll",0
f db "MessageBoxA",0

.code
invoke LoadLibrary, addr lib
invoke GetProcAddress, eax, addr funk

push MB_OK
push NULL
push NULL
push NULL
push 0E0FFh (опкод jmp eax)
jmp esp
---------------------------------------------
вроде работает, но если после jmp esp идет ret валится на стадии выполнения.
в чем бок?
и какие еще есть способы скрытого вызова АПИ?

w_2k
08.08.2008, 00:24
Хорошо, я примерно тут подразобрался...Но у меня вопрос, как узнать адрес нужного прерывания, адрес функции, как подставить свой адрес и с какое по какое место прогу надо оставлять в памяти?

Piflit
08.08.2008, 00:29
Juda скрытие таблицы импорта или речь идет о другом?

zl0y
08.08.2008, 01:43
как скрыть вызов АПИ ф-и?

пробовал использовать метод Криса(masm32):
------------------------------------------
пример вызова MessageBox
.data
lib db "user32.dll",0
f db "MessageBoxA",0

.code
invoke LoadLibrary, addr lib
invoke GetProcAddress, eax, addr funk

push MB_OK
push NULL
push NULL
push NULL
push 0E0FFh (опкод jmp eax)
jmp esp
---------------------------------------------
вроде работает, но если после jmp esp идет ret валится на стадии выполнения.
в чем бок?
и какие еще есть способы скрытого вызова АПИ?
Естественно будет падать,так как ты должен занести в стек адрес возврата перед вызовом после чего,после вызова апи сделать ret либо retn в зависимости от апишки,да и на новых процах запрещенно аппаратно исполнение в стеке(могу ошибаться).

0verbreaK
08.08.2008, 10:29
zl0y об int 2eh
http://z0mbie.daemonlab.org/ntoskrnl.html

Можно использовать адреса API функций:



mov eax, address_of_API
push argument1
push argument2
....
push argumentn
call eax

w_2k
08.08.2008, 11:02
0verbreak, у тебя случаем инфы по перехвату досовский прерываний нет?)

iv.
08.08.2008, 11:41
0verbreak, у тебя случаем инфы по перехвату досовский прерываний нет?)
если мне не изменяет память, инфа с примерами есть в книге Абашева "ассемблер в задачах защиты информации". как дома буду - гляну точно, у меня бумажный вариант..

Ryu
08.08.2008, 15:08
Это не метод криса. Это стандартный метод применяемый в вирусах. Только с той разницей что в вирусах не используется плейн название ф-ций а их хеш 32. Полиномы не стоит пробовать для хеширования новые подбирать - все нормальные уже посчтитали. Почитай статьи билли из 29а, на васме есть в вирмейкинге.

0verbreaK
08.08.2008, 20:01
w_2k на сайте калашникова в какомто уроке есть перехват прерывания

w_2k
08.08.2008, 20:24
О! Нашёл:-) Ток не совсем всё понял)
Init:
mov ah,35h
mov al,21h
int 21h
mov word ptr Int_21h_vect,bx
mov word ptr Int_21h_vect+2,es
mov ax,2521h
mov dx,offset Int_21h_proc
int 21h
mov dx,offset Init
int 27h
Это тоже в памяти будет?
з.ы. Не совсем понял с подменой регистров в основной процедуре,ведь адрес прерывания в переменной, а там регистры в стек/из стека

0verbreaK
08.08.2008, 22:21
w_2k Справочник Ральфа Брауна + Оля в руки и исследуй )

Juda
12.08.2008, 23:30
Пробовал все что советовали по скрытию апи, всеравно палится антивирями. Вот только руки не дошли до 29а.
Еще есть способ выташить апи через SEH:
----------------------------------

.386
.model flat,stdcall
option casemap:none

INCLUDE \masm32\include\windows.inc

INCLUDE \masm32\include\comdlg32.inc
INCLUDELIB \masm32\lib\comdlg32.lib

; ------ STRUCTS ------
sSEH STRUCT
OrgEsp DD ?
OrgEbp DD ?
SaveEip DD ?
sSEH ENDS

; ------ EQU'S ------
MIN_KERNEL_SEARCH_BASE EQU 070000000h
MAX_API_STRING_LENGTH EQU 150

; ------ CONST ------
.CONST
szLoadLibrary DB "LoadLibraryA",0
szGetProcAddress DB "GetProcAddress",0
szExitProcess DB "ExitProcess",0

szUser32 DB "user32",0
szMessageBox DB "MessageBoxA",0
szwsprintf DB "wsprintfA",0

szInfoCap DB "- Kernel -",0
szInfoText DB "The following information were obtained",13,10
DB "without the help of an Import Table !",13,10
DB 13,10
DB "Kernel32.dll ImageBase: 0x%08lX",13,10
DB "User32.dll ImageBase: 0x%08lX",13,10
DB 13,10
DB "API Addresses:",13,10
DB "LoadLibraryA: 0x%08lX",13,10
DB "GetProcAddress: 0x%08lX",13,10
DB "ExitProcess: 0x%08lX",13,10
DB 13,10
DB "MessageBoxA: 0x%08lX",13,10
DB "wsprintfA: 0x%08lX",0

; ------ DATA ------
.DATA
_LoadLibrary DD 0
_GetProcAddress DD 0
_ExitProcess DD 0
_MessageBox DD 0
_wsprintf DD 0

cBuff DB 200 DUP (0)
SEH sSEH <0>
dwKernelBase DD 0
dwUserBase DD 0

; ------ CODE ------
.CODE
main:
ASSUME FS : NOTHING

;INT 3

;---- GET ImageBase of kernel32.dll ----
PUSH [ESP]
CALL GetKernelBase
OR EAX, EAX
JZ QUIT
MOV dwKernelBase, EAX

;---- GET SOME KERNEL API ADDRESSES ----
;-> LoadLibraryA
PUSH OFFSET szLoadLibrary
PUSH dwKernelBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _LoadLibrary, EAX

;-> GetProcAddress
PUSH OFFSET szGetProcAddress
PUSH dwKernelBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _GetProcAddress, EAX

;-> ExitProcess
PUSH OFFSET szExitProcess
PUSH dwKernelBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _ExitProcess, EAX

;---- LOAD USER32.DLL ----
PUSH OFFSET szUser32
CALL _LoadLibrary
OR EAX, EAX
JZ QUIT
MOV dwUserBase, EAX

;---- GET SOME USER API ADDRESSES ----
;-> MessageBoxA
PUSH OFFSET szMessageBox
PUSH dwUserBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _MessageBox, EAX

;-> wsprintfA
PUSH OFFSET szwsprintf
PUSH dwUserBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _wsprintf, EAX

;---- BUILD AND SHOW THE INFORMATION MSG ----
PUSH _wsprintf
PUSH _MessageBox
PUSH _ExitProcess
PUSH _GetProcAddress
PUSH _LoadLibrary
PUSH dwUserBase
PUSH dwKernelBase

PUSH OFFSET szInfoText
PUSH OFFSET cBuff
CALL _wsprintf
ADD ESP, (9 * SIZEOF(DWORD))

PUSH MB_ICONINFORMATION OR MB_SYSTEMMODAL
PUSH OFFSET szInfoCap
PUSH OFFSET cBuff
PUSH 0
CALL _MessageBox

;---- EXIT ----
CALL _ExitProcess ;)

QUIT:
RET ; exit to OS

;---- AN UNUSED IMPORT ----
; The Win32 Loader of Win2k (maybe also of WinNT) won't call the EntryPoint of files which don't
; have an Import Table :(
; So here's an unused Import to make MASM compile an Import Table.

PUSH NULL
CALL GetOpenFileName

; ------ ROUTINES ------
; returns NULL in the case of an error
GetKernelBase PROC USES EDI ESI, dwTopStack : DWORD
; install SEH frame
PUSH OFFSET SehHandler
PUSH FS:[0]
MOV SEH.OrgEsp, ESP
MOV SEH.OrgEbp, EBP
MOV SEH.SaveEip, OFFSET ExceptCont
MOV FS:[0], ESP

; start the search
MOV EDI, dwTopStack
AND EDI, 0FFFF0000h ; wipe the LOWORD !
.WHILE TRUE
.IF WORD PTR [EDI] == IMAGE_DOS_SIGNATURE
MOV ESI, EDI
ADD ESI, [ESI+03Ch]
.IF DWORD PTR [ESI] == IMAGE_NT_SIGNATURE
.BREAK
.ENDIF
.ENDIF
ExceptCont:
SUB EDI, 010000h
.IF EDI < MIN_KERNEL_SEARCH_BASE
MOV EDI, 0BFF70000h
.BREAK
.ENDIF
.ENDW
XCHG EAX, EDI

; shutdown SEH frame
POP FS:[0]
ADD ESP, 4
RET
GetKernelBase ENDP

; returns address or NULL in the case of an error
GetProcAddr PROC USES ESI EDI ECX EBX EDX, dwDllBase : DWORD, szApi : LPSTR
; install SEH frame
PUSH OFFSET SehHandler
PUSH FS:[0]
MOV SEH.OrgEsp, ESP
MOV SEH.OrgEbp, EBP
MOV SEH.SaveEip, OFFSET @@BadExit
MOV FS:[0], ESP

; check PE Signarue
MOV ESI, dwDllBase
CMP WORD PTR [ESI], IMAGE_DOS_SIGNATURE
JNZ @@BadExit
ADD ESI, [ESI+03Ch]
CMP DWORD PTR [ESI], IMAGE_NT_SIGNATURE
JNZ @@BadExit

; get the string length of the target Api
MOV EDI, szApi
MOV ECX, MAX_API_STRING_LENGTH
XOR AL, AL
REPNZ SCASB
MOV ECX, EDI
SUB ECX, szApi ; ECX -> Api string length

; trace the export table
MOV EDX, [ESI+078h] ; EDX -> Export table
ADD EDX, dwDllBase
ASSUME EDX : PTR IMAGE_EXPORT_DIRECTORY
MOV EBX, [EDX].AddressOfNames ; EBX -> AddressOfNames array pointer
ADD EBX, dwDllBase
XOR EAX, EAX ; EAX AddressOfNames Index
.REPEAT
MOV EDI, [EBX]
ADD EDI, dwDllBase
MOV ESI, szApi
PUSH ECX ; save the api string length
REPZ CMPSB
.IF ZERO?
ADD ESP, 4
.BREAK
.ENDIF
POP ECX
ADD EBX, 4
INC EAX
.UNTIL EAX == [EDX].NumberOfNames

; did we found sth ?
.IF EAX == [EDX].NumberOfNames
JMP @@BadExit
.ENDIF

; find the corresponding Ordinal
MOV ESI, [EDX].AddressOfNameOrdinals
ADD ESI, dwDllBase
PUSH EDX ; save the export table pointer
MOV EBX, 2
XOR EDX, EDX
MUL EBX
POP EDX
ADD EAX, ESI
XOR ECX, ECX
MOV WORD PTR CX, [EAX] ; ECX -> Api Ordinal

; get the address of the api
MOV EDI, [EDX].AddressOfFunctions
XOR EDX, EDX
MOV EBX, 4
MOV EAX, ECX
MUL EBX
ADD EAX, dwDllBase
ADD EAX, EDI
MOV EAX, [EAX]
ADD EAX, dwDllBase
JMP @@ExitProc

ASSUME EDX : NOTHING

@@BadExit:
XOR EAX, EAX
@@ExitProc:
; shutdown SEH frame
POP FS:[0]
ADD ESP, 4
RET
GetProcAddr ENDP

SehHandler PROC C pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatc h:DWORD
MOV EAX, pContext
ASSUME EAX : PTR CONTEXT
PUSH SEH.SaveEip
POP [EAX].regEip
PUSH SEH.OrgEsp
POP [EAX].regEsp
PUSH SEH.OrgEbp
POP [EAX].regEbp
MOV EAX, ExceptionContinueExecution
RET
SehHandler ENDP

end main

--------------------------
вот только как бы я его не изменял, не упаковывал, не шифровал все равно палится анти вирями. Шифровал XORом. Что посоветуете?

0verbreaK
18.08.2008, 20:58
Juda

1) не храни строки в открытом виде
2) можно использовать адреса API
3) контрольные суммы функций
4) измени инструкции на подобные
5) морфи код

0verbreaK
23.08.2008, 13:10
Также есть вариант (может уже был озвучен, но приведу все равно) получение базы кернела (kernel32.dll) через адрес возврата, после загрузки программы в отладчик
на верхушке стека лежита адрес возврата на kernel32.dll

Следующая картина:


0012FFC4 77E7EB69 RETURN to kernel32.77E7EB69
0012FFC8 00000007
0012FFCC 00566ED0
0012FFD0 7FFDF000
0012FFD4 F4262CF4
0012FFD8 0012FFC8
0012FFDC 80536A0E
0012FFE0 FFFFFFFF End of SEH chain
0012FFE4 77E9BB86 SE handler



Используем следующий код для получения базы


start:
pop ebp ;Return to kernel32.dll
; (ошибка) адрес внутри кернела


Используя таблицу экспорта можно искать API функции по ординалу, просмотри в иде
таблицу экспорта, в ней можно получить адреса API функций и их ординалы, достаточно дизассемблировать kernel32.dll

FrMn
23.08.2008, 13:45
после загрузки программы в отладчик на верхушке стека лежита адрес возврата на kernel32.dll
не обязательно в отладчик
; т.е. мы извлекаем базу кернела
не базу, а какойто адрес внутри kernel32.dll
можно искать API функции по ординалу
ненадежно, ординал может отличатся в зависимости от весии библиотеки, лучше по хешу от имени

w_2k
26.08.2008, 23:41
Народ, кто нить подскажите плиз простейший генератор чисел в 16 битах? Пытался использовать миллисекунды, но функция 2c прерывания 21 ничего не возвращает:(

z01b
26.08.2008, 23:53
Народ, кто нить подскажите плиз простейший генератор чисел в 16 битах? Пытался использовать миллисекунды, но функция 2c прерывания 21 ничего не возвращает:(
тебе нужен код генерации псевдо-случайных чисел для дос?

w_2k
27.08.2008, 00:21
Ну, в принципе да.

z01b
27.08.2008, 00:24
Ну, в принципе да.


Простой:

randomize:
in al, 40h ; read micro-clock for initial seed
mov ah, al
in al, 40h
xchg al, ah
or ax, 1
mov rnum, ax
ret


Длинный:

jmp start

xxx:
mov ah, 02ch
int 21h
and dl, 0fh
cmp dl, 9
ja xxx
add dl, 30h
mov [di], dl
ret

delay:
mov cx, 0

yyy:
mov dx, 0a00h

zzz:
xor ax, ax
dec dx
cmp dx, 0
jne zzz

loop yyy
ret

start:
lea di, numb
call xxx
inc di
call delay
call xxx
inc di
call delay
call xxx
mov ah, 09h
lea dx, numb
int 21h
int 20h

numb db 4 dup('$')


ЗЫ В каком-то номере журнала комманды 29а, тоже был код генерации для дос .

w_2k
27.08.2008, 00:33
О! Спасиба) Пошёл тестить)
----------------------------------------
Странно, MASM короткий не хочет компилить....ругаецо, мол не известная операция(in)
А вот длинный работает как часы, завтра буду разбираться что к чему. Спасиба еще раз

z01b
27.08.2008, 03:02
О! Спасиба) Пошёл тестить)
----------------------------------------
Странно, MASM короткий не хочет компилить....ругаецо, мол не известная операция(in)
А вот длинный работает как часы, завтра буду разбираться что к чему. Спасиба еще раз
у тебя масм какой версии? =)

w_2k
27.08.2008, 11:18
у тебя масм какой версии? =)
Версия 6.11. Выкидывать пора? =)

z01b
27.08.2008, 13:19
Нет, старше если не ошибаюсь не линкует Дос код, а если для вин32апи, то лучше конечно юзать масм10 =)

4p3
01.09.2008, 18:09
Подскажите, пожалуйста, можно ли добиться улучшения быстродействия программы, если попутно использовать FPU. То есть, к примеру, я создаю через CreateThead еще поток, делаю в него вставку asm{} и работаю через FPU, пока тоже самое делает центральный процессор. Пишут вроде как при работающем FPU центральный проц работает отдельно. Еще также интересно вот что: количество FPU зависит от количества ядер проца?

Право даже не знал в какой раздел задать вопрос...

4p3
01.09.2008, 23:28
Только сейчас осознал, что не все написал.

Есть два потока. В первом случае. Они просто суммируют числа. при помощи add. Во втором случае первый поток делает все через add. а второй через fld, fadd, fstp.
Надо сравнить быстродействие.

NetSter
10.09.2008, 21:53
Доброго времени суток.
1)просьба показать пример собственного (програмного) заполнения векторной таблицы прерываний
2)если это возможно, то и смена местами в таблице аппаратные прерывания Nmi и Intr.
хотелось бы увидеть часть кода на асме которая отображает вышеизложенное.
если есть интересные линки по реализации прерываний и их использование на асме буду оч благодарен.
Заранее спасибо.

Cecil B Demented
12.09.2008, 15:40
Хай всем, ребят подскажите плз код простенького на асме - хватание аргументов из командной строки и выполнение их в коммандной строке. У мну аргументы не ловит совсем :( помогите плз :(


C:\masm32\get.exe netstat -a >> C:\log.log

z01b
12.09.2008, 16:36
Хай всем, ребят подскажите плз код простенького на асме - хватание аргументов из командной строки и выполнение их в коммандной строке. У мну аргументы не ловит совсем :( помогите плз :(


C:\masm32\get.exe netstat -a >> C:\log.log
Не понял вопроса, но мб invoke WinExec,...

FrMn
12.09.2008, 18:53
GetCommandLine, откидуешь имя файла, чтоб остались только аргументы(вручную либо CommandLineToArgvW+lstrcatW, либо исчо както). то, что получицо пинаешь в WinExec

bons
13.09.2008, 11:27
GetCommandLine, откидуешь имя файла, чтоб остались только аргументы(вручную либо CommandLineToArgvW+lstrcatW, либо исчо както). то, что получицо пинаешь в WinExec


WinExec неудобно использовать вместе с CommandLineToArgvW, потому что нет версии WinExec для юникода.

Можно использовать следующий код:


.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc

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

.data?
argc dd ?
st_info STARTUPINFO <>
pr_info PROCESS_INFORMATION <>

.code

start:
invoke GetCommandLineW
invoke CommandLineToArgvW, eax, addr argc
mov esi, eax

mLoop:
dec argc
cmp argc, 0
je mQuit
add esi, 4

invoke RtlZeroMemory, addr pr_info, sizeof pr_info
invoke RtlZeroMemory, addr st_info, sizeof st_info
mov st_info.cb, sizeof st_info
mov edx, [esi]

invoke CreateProcessW, 0, edx, NULL, NULL, FALSE, 0, NULL, NULL, addr st_info, addr pr_info
invoke WaitForSingleObject, pr_info.hProcess, INFINITE
invoke CloseHandle, pr_info.hProcess
invoke CloseHandle, pr_info.hThread

jmp mLoop

mQuit:
invoke ExitProcess, 0
end start


но тогда запускать надо примерно так:


startproc "netstat /a" >> log.txt

FrMn
13.09.2008, 12:51
и как CreateProcess должен реагировать, когда получает комманду на запуск >> ? :)
format PE GUI 4.0
include '%fasminc%/win32a.inc'
section '.code' code readable writeable executable

fmt db "%s %ws",0
szfile db "12345.bat",0
entry $
;получить и разделить аргументы
invoke GetCommandLineW
push eax
invoke CommandLineToArgvW, eax, esp

lea esi,[eax+4]
pop edi

;выделить строку под склеенные аргументы
invoke VirtualAlloc,0,1000h,MEM_COMMIT+MEM_RESERVE,PAGE_R EADWRITE
mov ebx,eax
test eax,eax
jz .exit

;склеить аргументы(кроме нулевого)
@@:
sub edi,1
jz @f
lodsd
cinvoke _snprintf,ebx,1000h,fmt,ebx,eax
jmp @b
@@:

;сздать батник
add ebx,1
sub esp,sizeof.OFSTRUCT
invoke OpenFile,szfile,esp,OF_CREATE
mov esi,eax
add esp,sizeof.OFSTRUCT

;записать туда строку
invoke lstrlen,ebx
invoke WriteFile,esi,ebx,eax,esp,0
invoke CloseHandle,esi

;запустить
invoke WinExec,szfile,SW_HIDE
invoke VirtualFree,ebx,0,MEM_RELEASE

;удалить
invoke DeleteFile,szfile
.exit:
invoke ExitProcess,0


data import
library kernel32,'KERNEL32.DLL',\
kernel32w,'KERNEL32.DLL',\
user32,'USER32.DLL',\
shell32,'shell32.dll',\
ntdll,'ntdll.dll'

include '%fasminc%\apia\comdlg32.inc'
include '%fasminc%\apia\user32.inc'
include '%fasminc%\apia\kernel32.inc'
import shell32,\
CommandLineToArgvW,'CommandLineToArgvW'
import kernel32w,\
GetCommandLineW,'GetCommandLineW'
include '%fasminc%\ntdll.inc'
end data

bons
13.09.2008, 13:56
и как CreateProcess должен реагировать, когда получает комманду на запуск >> ?


никак, потому что он ее не получает. Можешь проверить, GetCommandLineW возвращает строку без >>


создавать батник - это уже совсем неоптимально. Например если не будет прав на запись в текущую директорию то утилита не сработает

использовать VirtualAlloc для выделения небольших объемов памяти не очень правильно, т.к. размер выравнивается по размеру страницы

FrMn
13.09.2008, 14:14
никак, потому что он ее не получает, поэтому и нужны кавычки.
насколько йа понимаю >> это жизненно важный оператор в данной строке, который указывает, что надобы записать вывод нетстата в файл. будет ли достигнут этот результат при использовании твоей проги - нет.
а >> криэтпроцес получает на втором витке цикла.

использовать VirtualAlloc для выделения небольших объемов памяти не очень правильно
а йа вроде и выделяю 4кб строницу, в чем вопрос?

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

bons
13.09.2008, 14:40
насколько йа понимаю >> это жизненно важный оператор в данной строке, который указывает, что надобы записать вывод нетстата в файл. будет ли достигнут этот результат при использовании твоей проги - нет.


почему не будет? еще как будет;)


а йа вроде и выделяю 4кб строницу, в чем вопрос?


в том что страницы не всегда по 4 кб


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


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


сделой, чтоб создовалось в темпе, туда доступ вроде как всегда есть.


создавать бат-файл вообще нет необходимости

Cecil B Demented
13.09.2008, 15:46
bons так же обрывается поток ">>" ну или ">" создаёт пустой файл :(

FrMn
13.09.2008, 15:59
;запустить
invoke WinExec,szfile,SW_SHOW

это в моем кодесе подправить надо. после этого
prog.exe "netstat /a > asd.txt"

создается непустой файл.

NetSter
14.09.2008, 23:38
кто чем может помочь по теме
http://forum.antichat.ru/showpost.php?p=856928&postcount=417
просьба отписать. очень нужно реализовать замену прерываний. спасибо.

Велемир
28.09.2008, 14:38
(1) CSEG segment
(2) org 100h
(3) Begin:
(4) mov ax,0B800h
(5) mov es,ax
(6) mov di,0
(7) mov al,1
(8) mov ah,31
(9) mov cx,2000
(10)
(11) Next_face:
(12) mov es:[di],ax
(13) add di,2
(14) loop Next_face
(15)
(16) mov ah,10h
(17) int 16h
(18) int 20h
(19) CSEG ends
(20) end Begin

Вот никуя не фтыкаю,каким раком в 12-ой строке кода заносится не 0B800h (адрес видеобуфера),а ASCII код символа и атрибут его,если в ax УЖЕ сохранен адрес видеобуфера 0B800h ? Загадко =_=

slesh
29.09.2008, 09:17
(4) mov ax,0B800h
(5) mov es,ax
Занесет в es значение сегмента видиобуфера.
после чего тебе уже не важны значения ax
ну а дальше :
(12) mov es:[di],ax
занесет значение AX в cегмент памяти указанный в es(который уже указывает на 0B800h ) по смещению указанном в DI

-m0rgan-
30.09.2008, 21:28
Я нуб в кодинге и недавно начал учить АССЕМБЛЕР, и появились меня такие вопросы:
1)Какая команда форматит все диски на харде?
2)Какая команда сможет вывести анимашка на ВЕСЬ экран и полный отказ клавы и мыши?
3)Возможно ли написать вирь шоб изменяла настройки биоса?
Зарание спасибо!!!

De-visible
30.09.2008, 22:06
Я нуб в кодинге и недавно начал учить АССЕМБЛЕР, и появились меня такие вопросы:
1)Какая команда форматит все диски на харде?
2)Какая команда сможет вывести анимашка на ВЕСЬ экран и полный отказ клавы и мыши?
3)Возможно ли написать вирь шоб изменяла настройки биоса?
Зарание спасибо!!!
Пыщь.... (http://google.com)

KaZ@NoVa
01.10.2008, 00:02
1.только тебе надо сходить купить партишн магик( в любой ларёк),либо отдельно,либо с "он входит в золотой софт",там есть раздел:Boot загрузка.
Короче заходи в биос,затем жми по счёту на 3 строку,а дальше на 4(аварийная загрузка) и меняй её с HDD на CD ROM,далее вставляй диск,который купил и у тебя появится строка выбор.Что выбрать:там доктор вэб,ещё что то,и партишн.Выбирай партишн и далее по инструкции,она там по русски.Очень легко всё.Когда разбил на разделы,то вставляй ОСь,ну и далее всё легко вообще.
Можно сделать и виндой всё но это запарно очень.Там надо ДОС команды знать.А вообще можно диск С снять клавиша там указана и отформатировать.Всего около часа работы.

ЗЫ..А самый лучший способ отформатировать диск,сбросить его в речку. Ну на краяняк можно топором рубануть по нему со всей дури)) Стопроцентное стирание всех файлов обеспечено!!!

2.

0verbreaK
02.10.2008, 16:40
Приветствую вас.

Киньте исходник мощного парсера если таковой имеется.

vikseriq
04.10.2008, 16:29
Я нуб в кодинге и недавно начал учить АССЕМБЛЕР, и появились меня такие вопросы:
1)Какая команда форматит все диски на харде?
2)Какая команда сможет вывести анимашка на ВЕСЬ экран и полный отказ клавы и мыши?
3)Возможно ли написать вирь шоб изменяла настройки биоса?
Зарание спасибо!!!
1. Нет такой. Зато есть прямой доступ к венику - по байту затери - и радуйся ))
2. Запомни, в ассемблере даже подобия нет на writeln и прочие - записавый данные напрямую в видеобуфер.
3. изменить биос обломаешься.
4. вирус тебе написать невозможно.
5. пункт 4 - это диагноз
6. угробить веник - раскрути, переломай увутренние диски, оторви головку ползунка и перепаяй провода наоборот )
7. Не за что :cool:

0verbreaK
26.10.2008, 03:24
3. изменить биос обломаешься.

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

bons
26.10.2008, 12:21
хакер который нашел брешь в биосе


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

0verbreaK
26.10.2008, 20:41
bons ты считаешь что вирус может перепрошить биос,?!

bons
26.10.2008, 21:31
конечно, ведь кто тебе запрещает реверсировать любою из утилит для перепрошивки и использовать ее код, проблема в том что этот код будет совсем не универсальным.
перепрошить можно и не только биос
К примеру Грег Хоглунд писал о руткитах, встраивающихся в прошивку сетевой карты. Конечно это будет аппаратно-зависимый руткит, который пишется для одного конкретного случая. Я пока не занимался таким программированием поэтому только лишь порекомендую книгу этого автора

0verbreaK
26.10.2008, 22:23
только лишь порекомендую книгу этого автора

Не понравилась мне его книга нихрена там нового нет, кроме погрешностей перевода и мало освещенных тем, тем не менее можно прочитать перед сном

Horoshaja_devo4ka
27.10.2008, 09:38
Сорри за нескромный вопрос. Где мона взять сорцы пинча или чего-нить подобного? Облазила гугл, не нашла. Плохо искала, или его в паблике нет? :)

SpangeBoB
27.10.2008, 10:15
Сорри за нескромный вопрос. Где мона взять сорцы пинча или чего-нить подобного? Облазила гугл, не нашла. Плохо искала, или его в паблике нет? :)
http://www.sendspace.com/file/abkhrh

o_OBallers
29.10.2008, 17:28
Блокировать ввод с мыши и клавиатуры

push 1
call BlockInput

Разблокировать

push 0
call BlockInput

0verbreaK
29.10.2008, 20:45
http://www.sendspace.com/file/abkhrh

Удали скорей ссылку ато появятся новые мегаприватные пинчи by Deffa4ka ;)

Стеклавата
01.11.2008, 08:24
Horoshaja_devo4ka,а можно нескромный вопрос?
Вас ебать и ебать бы,что же вы делаете вернее,что вас привело на хеккерский форум?

Horoshaja_devo4ka
01.11.2008, 09:01
Horoshaja_devo4ka,а можно нескромный вопрос?
Вас ебать и ебать бы,что же вы делаете вернее,что вас привело на хеккерский форум?
:))) Как нескромно-то...Увлечения привели)
Стеклавата, встречный вопрос: Вам бы е..ть и е...ть, что вас привело на хэккерский форум?)))

Грот
01.11.2008, 09:04
Удали скорей ссылку ато появятся новые мегаприватные пинчи by Deffa4ka ;)

этих ссылок в инете море так что смысл
если так нужно могу выложить исходник всех пинчей за исключением 2,99

а писать то хотел тот написал, там просто можно добавить новые модули, например для ворования пароля от квипа который есть в 2,99,
нужно только указать алгоритм расшифровки,
чуть не забыл обязательно нужно изменить алгоритм шифровки отчета (модуль xor). как только ты изменишь вариант криптовки придеться менять
парсер так как именно это и отличает парсеры
можно конечно написать пограмку которая будет раскодироавть отчет зная как способом он закриптован и криптовать его по новой используя модуль хор который идет в комплекте с билдером.

Horoshaja_devo4ka
01.11.2008, 09:08
могу выложить исходник всех пинчей за исключением 2,99
Хорошо бы:)

Грот
01.11.2008, 11:09
Тема относиться к программированию а не к распростронению пинча стукни в асю 598926
дам все версии и для сравнения хинч,
pinch258 pinch257 pinch1.1 Хинч pinch260 это все что есть в исходниках

думаю билдеры тебя не интересуют (я имею в веду редакторы)

Feonor
22.11.2008, 02:58
крыша едет плз помогите...
теперь по теме:
_h DD ? ;размер _h 4 байта!
внимание вопрос! как через регистры присвоить _h значение?
Примечание: использую masm (он 16ти разрядный)
MOV _h, EAX
не предлагать, там нет eax :(

bons
22.11.2008, 10:40
крыша едет плз помогите...

например так

mov WORD PTR [_h], ax
mov WORD PTR [_h+2], dx


или так

mov si, offset _h
mov WORD PTR [si+0], ax
mov WORD PTR [si+2], dx

Anutka
22.11.2008, 14:01
расскажите мне, пожалуйста, как компилировть в turbo assembler?

NetSter
22.11.2008, 15:11
http://amonit.sulfurzona.com/index.php?art=40
Anutka, так будет проще...

delay(0)
22.11.2008, 15:46
не предлагать, там нет eax :(
Это 32-разрядный регистр. ah,ax,al тебе в помощь.

Jes
25.11.2008, 21:44
Банальный вопрос ,
FASM

Есть адрес Буфера MyBuffer (выделенного через HeapAlloc )

как обратиться по адресу внутри переменной содержащий адрес буфера? тоесть например как 10й байт самого буфера поменять на свой байт ?
FASM

iv.
25.11.2008, 21:53
Jes, как-то так
mov byte ptr [MyBuffer+10], ah

Jes
25.11.2008, 22:19
fasm ptr принципиально понимать не хочет :/

bons
25.11.2008, 22:56
fasm понимает название переменной как адрес.
То есть чтобы обратиться к переменной всегда нужны скобки
mov [x], 1
mov [x+5], 1
mov [x], al
mov eax, [x]

допустим в pBuf адрес буфера
mov esi, [pBuf]
mov al, [esi+10]

так в al будет десятый байт буфера

mov [esi+10], ah

так десятым байтом буфера станет содержимое ah

A2GIL
28.11.2008, 20:44
Ребят, кому не жалко и если есть свободное время. Думаю тем кто знает asm это будет достаточно тривиально..

на TASMе

на консоль вывести просто любые положительные и любые отрицательные числа...

Буду благодарен=)

[Актуально до 29.1108]

VERte][
29.11.2008, 02:50
Ребят, кому не жалко и если есть свободное время. Думаю тем кто знает asm это будет достаточно тривиально..

на TASMе

на консоль вывести просто любые положительные и любые отрицательные числа...

Буду благодарен=)

[Актуально до 29.1108]

уже писал в асю, напишу здесь вдруг кому понадобится.
что делает: выводит числа (процедура procoutnum делает форматный вывод), число находится в ax (передается в процедуру procoutnum) (в ax именно число, а не код символа)
фичи (для процедуры procoutnum):
dl - длина поля для вывода числа (если dl меньше количества цифр в числе, то число выводится примыкаясь к предыдущевыведенному, что-то на подобии форматного вывода ф-ции write в паскале)
dh = 1 формат вывода со знаком (-1 выведется как -1)
dh = 2 формат вывода без знака (-1 выведется как 65535)
в основной "процедуре" start два цикла для вывода чисел от 0 до 9 и от -1 до -10

stack segment stack
dw 128 dup(?)
stack ends

code segment
assume cs: code

procoutnum proc far
push bp
mov bp,sp
push ax
push dx
push si
sub sp,6
cmp dh,1
jne pon0
cmp ax,0
jge pon0
mov dh,2
neg ax
pon0:
push dx
xor si,si
pon1:
mov dx,0
div cs:ten
add dl,'0'
mov byte ptr [bp-12+si],dl
inc si
or ax,ax
jnz pon1
pop dx
cmp dh,2
jne pon2
mov byte ptr [bp-12+si],'-'
inc si
pon2:
mov dh,0
mov ah,2
pon21:
cmp dx,si
jle pon3
push dx
mov dl,' '
int 21h
pop dx
dec dx
jmp pon21
pon3:
dec si
mov dl,byte ptr [bp-12+si]
int 21h
or si,si
jnz pon3
add sp,6
pop si
pop dx
pop ax
pop bp
ret
ten dw 10
procoutnum endp

start:
mov cx, 10
xor ax, ax
mov dh,1
mov dl, 2
l:
call procoutnum
inc ax
loop l
mov cx, 10
xor ax,ax
k:
dec ax
call procoutnum
loop k
mov ah, 10h
int 16h
mov ah, 4ch
int 21h
code ends
end start

Buffalon
30.11.2008, 15:43
Ребята я вообще по 0 в асемблере , нужно вот это написать

y=10 если x>5 или x=c

y= 12 в других случаях

iv.
30.11.2008, 15:51
Buffalon
cmp x, 5
jbe ELSE
cmp x, c
jne ELSE
mov y, 10
jmp CONT
ELSE: mov y, 12
CONT: ...

F&D
01.12.2008, 20:09
Доброго времени суток. Надеюсь кто-то из здесь присутствубщих имел когда нибудь дело с отладочным стендом EV8031/AVR (V. 3.2), вот по нему у меня и лаба. Изначально задание было таким:
По нажатию кнопки SW15 включать «бегущий огонь» на линейке светодиодов HL1-HL8. Код этой проги вот:

CSEG
ORG 0
Continue:
mov A, #10000000b
mov DPTR, #0A006h
movx @DPTR, A ;отменить гашение знакомест С_инд
mov A, #0h ;записать в Акк. число 04
mov DPTR, #0A006h ;установить в DPTR адрес левой
;пары знакомест С_инд
movx @DPTR, A
mov DPTR, #0B006h ;установить в DPTR адрес правой
;пары знакомест С_инд
movx @DPTR, A
CALL ZAD ;вызов подпрограммы задержки
mov A, #10000000b
mov DPTR, #0A006h
movx @DPTR, A ;погасить все знакоместа С_инд

CALL ZAD ;вызов подпрограммы задержки
mov A, #01000000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00100000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00010000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00001000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00000100b
mov DPTR, #0A006h
movx @DPTR, A

CALL ZAD
mov A, #00000010b
mov DPTR, #0A006h
movx @DPTR, A

CALL ZAD
mov A, #00000001b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
jmp Continue ;переход на начало программы

ZAD: ;подпрограмма задержки
mov R1, #0FFh
C2: mov R2, #0FFh
C4: djnz R2, C4
djnz R1, C2

ret ;выход из подпрограммы
END



Но потом последовало дополнительное задание, звучит: При нажатии кнопки SW15 включать «бегущий огонь» на линейке светодиодов HL1-HL8, при еще одном нажатии "бегущий огонь" должен остановиться, при еще одно - дальше "побежать"....
думал две пары как сделать(даже на С++ пытался) - не могу...
Помогите плиз...

Kaas
03.12.2008, 15:01
Ребят, есть вопрос по небольшой проге. вот код:


assume cs:code, ds:data
code segment
org 100h
start:

lea bx, work
mov cx, 10
mov di, 0 ; index (row)

a0:
push cx
push di

mov cx, 10
mov di, 0 ;index (column)

a1:
;mov [bx+di*2], di
mov 2[bx][di], di

; start show number
mov ax, 2[bx][di]

push cx
push di

std
lea di,StringEnd-1


mov cx,10
iRepeat:
xor dx,dx
div cx
xchg ax,dx
add al,'0'
stosb
xchg ax,dx
or ax,ax
jne iRepeat

mov ah,9
lea dx,[di+1]
int 21h
mov dx, offset Space
int 21h

pop di
pop cx

inc di
;end show number

loop a1

pop di ;reincornate di, cx
pop cx ;
add bx, 10*2 ; go to next line

push ax
push dx

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

pop dx
pop ax

loop a0

Space db " ", '$'
String db 5 dup (?),'$' ; 5 byte for string
StringEnd = $-1 ; Ukazatel' na simvol '$'

work dw 100 dup (0h) ;mass work <- 100 word's
nl db 0Dh, 0Ah, '$'
code ends

data segment

ends data

end start


Здесь задается матрица 10*10, заполняется нулями, а затем в двойном цикле заполняется числами (0...9) и на каждой итерации элемент выводится в консоль.

Проблема в том, что выводится только 75 элементов, а не все 100 - в чем причина?)

StealthMaster
04.12.2008, 02:01
Ребят, помогите пожалуйста... Через консоль должно вводиться шестнадцатиричное число. Для ввода использую ReadConcole. Как работать с переменной, куда ввел все это, как с числом в шестнадцатиричной системе, а не как со строкой...

Использую MASM 10.

bons
04.12.2008, 04:46
Ребят, помогите пожалуйста... Через консоль должно вводиться шестнадцатиричное число. Для ввода использую ReadConcole. Как работать с переменной, куда ввел все это, как с числом в шестнадцатиричной системе, а не как со строкой...

вот пример ввода строки, содержащей 16-ое число. процедура Ascii2Hex переводит ее именно в числовой вид

.386
.model flat, stdcall
option casemap :none

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib

include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib

Ascii2Hex PROTO :DWORD
cprintf PROTO C :DWORD, :DWORD, :VARARG

.data
msgStart db "# Enter num: "
outformat db "%u", 0
buf db 128 dup (0)
.data?
hOut dd ?
hIn dd ?
bw dd ?

.code
start:
invoke GetStdHandle, STD_INPUT_HANDLE
mov hIn, eax
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOut, eax

invoke WriteFile, eax, offset msgStart, sizeof msgStart, offset bw, 0

invoke ReadFile, hIn, offset buf, sizeof buf - 1, offset bw, 0
mov esi, bw
mov BYTE PTR [buf + esi - 2], 0
invoke Ascii2Hex, offset buf
invoke cprintf, hOut, offset outformat, eax
invoke ExitProcess, 0

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
; Перевети hex-строку в число
Ascii2Hex proc uses ebx esi lpHexString:DWORD
mov esi, lpHexString
xor eax, eax
xor ebx, ebx
@@:
mov al, BYTE PTR [esi]
test al, al
jz @exit
shl ebx, 4
.IF al > 040h
sub al, 007h
.ENDIF
xor al, 030h
or ebx, eax
inc esi
jmp @B
@exit:
mov eax, ebx
ret
Ascii2Hex endp

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
;Печатать форматированный текст в консоли
cprintf proc C hOutHandle:DWORD, lpFormat:DWORD, arglist:VARARG
LOCAL locbuf[2048] :BYTE
LOCAL dwWritten :DWORD
invoke wvsprintf, addr locbuf, lpFormat, addr arglist
mov ecx, eax
invoke WriteFile, hOutHandle, addr locbuf, ecx, addr dwWritten, 0
ret
cprintf endp
end start

0verbreaK
05.12.2008, 00:47
Kaas бинарь свой скинь

lll6
07.12.2008, 02:10
Ребята, кто может помочь изучающему асм немного? Литература конечно есть, но это немного не то, практики нет, в которой и познаётся теория. Если вдруг в ком проснулось альтруистичное начало - чиркните мне в icq 192693716

StealthMaster
11.12.2008, 04:41
Подскажите, пожалуйста, как работать с введенной строкой как с десятичным числом?

slesh
11.12.2008, 09:59
также как и с обычными числами, но предварительно переведя его из строки в число.
Алгоритм перевода примерно такой:
1) получаешь длинну строки
2) перебираешь поочереди каждый символ.
3) отнимаешь от символа 48 и получаешь какбыла непосредственно значение.
4) умножаешь число полученное на предудущем этапе на 10 и к нему прибавляешь то, что получилось от символа.
5) повторяешь заного всё пока недостигнут конец строки

reversys
16.12.2008, 03:36
Можно я тоже попользуюсь коллективным разумом античата? :)
Цель - написать на ассемблере программу получающую состояние ком порта и работающую в досе.
Как по вашему это наиболее грамотно сделать? Вопрос и о самой программе и об инфраструктуре.

Сейчас сделал виртуалбокс с досом, попытался настроить так чтобы com порт виртуалки смотрел в COM1 основной машины, но vmbox ругнулся и сказал что прав нет. Это из-за того что XP на основной машине не позволяет работать с портами напрямую?

И ещё: если в старый комп с досом воткнуть в com порт мышь, не ставя при этом драйверов - можно ли будет в своей программе (использующей прерывание 14h например) видеть изменение состояния ком порта? А если поставить дрова останется ли возможность работать с портом напрямую? Есть ли разница в данном случае где это всё будет работать в win98 или чистом dos?

Вобщем любые идеи, ссылки, исходники приветствуются, а хорошие - плюсуются.
Заранее спасибо.

xxxxxxxxxxxxxxx
19.12.2008, 15:18
мне нужно обьяснить как работают кусочки кода (коментами если можна) место откуда нужно писать коментарии в исходнике там немножко - помогите кто может((

# Переменные
a:
.long 1
b:
.long 2
c:
.long 3
d:
.long 4
cc:
.byte 10


.text
LC0:
.ascii "a=%d b=%d c=%d d=%d\12\0"
LC1:
.ascii "a=%d b=%d c=%d d=%d\12\0"

.globl _xxx
.def _xxx; .scl 2; .type 32; .endef
_xxx:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
subl $12, %esp
pushl d
pushl c
pushl b
pushl a
pushl $LC0
call _printf
addl $32, %esp
leave
ret

.globl _func
.def _func; .scl 2; .type 32; .endef
_func:
pushl %ebp
movl %esp, %ebp

movl %eax, %ecx

imul %eax
imul %ecx
movl %eax,%edx
movl $2,%eax
mull %ecx
#xor %edx, %edx
subl %eax, %edx
incl %edx
movl %edx,%eax
pop %ebp
leave
ret
.globl _func1
.def _func1; .scl 2; .type 32; .endef

_func1:
pushl %ebp
movl %esp, %ebp

movl 16(%ebp), %eax
imul %eax
movl 12(%ebp), %ebx
imul %ebx
movl %eax, %ecx
movl 16(%ebp), %eax
movl 8(%ebp), %ebx
imul %ebx
addl %ecx, %eax
movl 4(%ebp), %edx
subl %edx, %eax
pop %ebp
leave
ret


.globl _main
.def _main; .scl 2; .type 32; .endef

_main:
pushl %ebp
movl %esp, %ebp
#Начиная отсюда нужно написать обьяснения как #работают задачки

#Выполнить сравнение двух чисел a и b: если a>b, то #a=a-b; если a=b, то a=2*a; если a<b, то b=b-a.

movl $20, %ecx
xorl %ebx, %ebx
h:
movl %ecx, %eax
imul %eax
addl %eax, %ebx
movl %ebx, a
loop h
call _xxx

#Выполнить сравнение двух чисел a и b: если a>b, то #a=a-b; если a=b, то a=2*a; если a<b, то b=b-a.

movl a, %eax
movl b, %ebx
cmpl %ebx, %eax

jg v
je x
jl z
v:subl %ebx, %eax
movl %eax, a
jmp s1
x:movl a, %eax
imul $2, %eax
movl %eax, a
jmp s1
z:mo
vl b,%ebx
movl a, %eax
subl %eax, %ebx
movl %ebx, b
jmp s1
s1:
call _xxx

#Создать функцию y(x)=x3-2*x+1, которая через #регистр eax получает аргумент и возвращает #результат.

movl a, %eax
call _func
movl %eax, a
call _xxx

#Создать функцию y(x,a,b,c)=a*x2+b*x-c, которая #через стек получает аргументы x, a, b, c и возвращает #результат

pushl x
pushl a
pushl b
pushl c
call _func1
movl %eax, c
addl $16,%esp
call _xxx

#Вычислить N! (N=30) двумя способами: используя цикл, #рекурсию.
movl $1, %eax
movl $1, %ebx
x3:
cmpl 30, %eax
jle x1
jg x2
x1:imul %eax, %ebx
incl %ebx
jmp x3
x2:m
ovl %eax, d
call _xxx

Kaas
22.12.2008, 02:15
парни, есть проблема с открытием файла (tasm)


1. делаю файл hook, кладу в папку где лежит мой скомпилированный .com
2. в самой проге основной код такой:


mov ax, 3D02h ;открыть файл на чтение и запись
mov dx, offset fn
int 21h

...
fn db "hook",'0' ;имя файла


после этого в ax оказывается цифра 05h что, судя по зубкову, означает - доступ запрещен.

Почему??

izlesa
22.12.2008, 02:31
2Kaas
бугога ))) имя файла у тебя hook0[много всякого мусора]x00
Делай так :

fn db 'hook',0

Хотя странно, должен был вернуть 02h :/
Открой отладчик (codeview хотя бы) и посмотри, что у тебя в регистрах на каждом шаге.
Да ещё, когда ты запускал прогу свою, был ли открыт гденибудь ещё этот файл ... пока всё, что пришло в мою больную голову :\

ronald
07.01.2009, 22:09
народ, у меня проблема, причём очень странная:
запуская ml.exe имя файла /AT
я получаю через 3-5 секунд ответ: "Программа не умещается в памяти"
вот код программы

CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin

Помогите пожалуйста разбраться с этой х***й
ноут Asus EEE PC 9

dinar_007
08.01.2009, 18:21
народ, у меня проблема, причём очень странная:
запуская ml.exe имя файла /AT
я получаю через 3-5 секунд ответ: "Программа не умещается в памяти"
вот код программы

CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin

Помогите пожалуйста разбраться с этой х***й
ноут Asus EEE PC 9
Ссори за нескромный вопрос.. Ты ком файл пытаешься в Висте запустить? :D

SHP!ON
09.01.2009, 17:05
Я неособо разбираюсь в masm и не могу скомпилировать данный код, чтоб был exe. Кто может помочь ? Может что дописать нужно. Алгоритм: md5 hashing algo.


.686
.model flat,stdcall
option casemap:none

.data?
MD5HashBuf db 64 dup(?)
MD5Digest dd 4 dup(?)
MD5Len dd ?
MD5Index dd ?

.code
MD5FF macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwC
xor edi,dwD
and edi,dwB
xor edi,dwD
add dwA,[locX]
lea dwA,[edi+dwA+constAC]
rol dwA,rolS
add dwA,dwB
endm

MD5GG macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwC
xor edi,dwB
and edi,dwD
xor edi,dwC
add dwA,[locX]
lea dwA,[edi+dwA+constAC]
rol dwA,rolS
add dwA,dwB
endm

MD5HH macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwC
xor edi,dwD
xor edi,dwB
add dwA,[locX]
lea dwA,[dwA+edi+constAC]
rol dwA,rolS
add dwA,dwB
endm

MD5II macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwD
xor edi,-1
or edi,dwB
xor edi,dwC
add dwA,[locX]
lea dwA,[edi+dwA+constAC]
rol dwA,rolS
add dwA,dwB
endm

align dword
MD5Transform proc
pushad
mov esi,offset MD5Digest
mov edi,offset MD5HashBuf
mov eax,[esi+0*4]
mov ebx,[esi+1*4]
mov ecx,[esi+2*4]
mov ebp,edi
mov edx,[esi+3*4]
;================================================= =============
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 7, 0D76AA478H
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+ 1*4], 12, 0E8C7B756H
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 17, 0242070DBH
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 22, 0C1BDCEEEH
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+ 4*4], 7, 0F57C0FAFH
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+ 5*4], 12, 04787C62AH
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+ 6*4], 17, 0A8304613H
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+ 7*4], 22, 0FD469501H
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 7, 0698098D8H
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 12, 08B44F7AFH
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+10*4], 17, 0FFFF5BB1H
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+11*4], 22, 0895CD7BEH
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+12*4], 7, 06B901122H
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+13*4], 12, 0FD987193H
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+14*4], 17, 0A679438EH
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+15*4], 22, 049B40821H
;================================================= =============
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 5, 0F61E2562H
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+ 6*4], 9, 0C040B340H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+11*4], 14, 0265E5A51H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+ 0*4], 20, 0E9B6C7AAH
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+ 5*4], 5, 0D62F105DH
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+10*4], 9, 002441453H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+15*4], 14, 0D8A1E681H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+ 4*4], 20, 0E7D3FBC8H
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 5, 021E1CDE6H
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+14*4], 9, 0C33707D6H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 14, 0F4D50D87H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+ 8*4], 20, 0455A14EDH
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+13*4], 5, 0A9E3E905H
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+ 2*4], 9, 0FCEFA3F8H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+ 7*4], 14, 0676F02D9H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+12*4], 20, 08D2A4C8AH
;================================================= =============
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+ 5*4], 4, 0FFFA3942H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+ 8*4], 11, 08771F681H
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+11*4], 16, 06D9D6122H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+14*4], 23, 0FDE5380CH
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 4, 0A4BEEA44H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+ 4*4], 11, 04BDECFA9H
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+ 7*4], 16, 0F6BB4B60H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+10*4], 23, 0BEBFBC70H
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+13*4], 4, 0289B7EC6H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+ 0*4], 11, 0EAA127FAH
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 16, 0D4EF3085H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+ 6*4], 23, 004881D05H
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 4, 0D9D4D039H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+12*4], 11, 0E6DB99E5H
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+15*4], 16, 01FA27CF8H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 23, 0C4AC5665H
;================================================= =============
MD5II eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 6, 0F4292244H
MD5II edx, eax, ebx, ecx, dword ptr [ebp+ 7*4], 10, 0432AFF97H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+14*4], 15, 0AB9423A7H
MD5II ebx, ecx, edx, eax, dword ptr [ebp+ 5*4], 21, 0FC93A039H
MD5II eax, ebx, ecx, edx, dword ptr [ebp+12*4], 6, 0655B59C3H
MD5II edx, eax, ebx, ecx, dword ptr [ebp+ 3*4], 10, 08F0CCC92H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+10*4], 15, 0FFEFF47DH
MD5II ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 21, 085845DD1H
MD5II eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 6, 06FA87E4FH
MD5II edx, eax, ebx, ecx, dword ptr [ebp+15*4], 10, 0FE2CE6E0H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+ 6*4], 15, 0A3014314H
MD5II ebx, ecx, edx, eax, dword ptr [ebp+13*4], 21, 04E0811A1H
MD5II eax, ebx, ecx, edx, dword ptr [ebp+ 4*4], 6, 0F7537E82H
MD5II edx, eax, ebx, ecx, dword ptr [ebp+11*4], 10, 0BD3AF235H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 15, 02AD7D2BBH
MD5II ebx, ecx, edx, eax, dword ptr [ebp+ 9*4], 21, 0EB86D391H
;================================================= =============
add [esi+0*4],eax ; update digest
add [esi+1*4],ebx
add [esi+2*4],ecx
add [esi+3*4],edx
popad
retn
MD5Transform endp

MD5BURN macro
xor eax,eax
mov MD5Index,eax
mov edi,Offset MD5HashBuf
mov ecx,(sizeof MD5HashBuf)/4
rep stosd
endm

align dword
MD5Init proc uses edi
xor eax, eax
mov MD5Len,eax
MD5BURN
mov eax,offset MD5Digest
mov dword ptr [eax+0*4],067452301h
mov dword ptr [eax+1*4],0EFCDAB89h
mov dword ptr [eax+2*4],098BADCFEh
mov dword ptr [eax+3*4],010325476h
ret
MD5Init endp

align dword
MD5Update proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
mov ebx,dwBufLen
mov esi,lpBuffer
add MD5Len,ebx
.while ebx
mov eax,MD5Index
mov ecx,64
sub ecx,eax
lea edi,[MD5HashBuf+eax]
.if ecx <= ebx
sub ebx,ecx
rep movsb
call MD5Transform
MD5BURN
.else
mov ecx,ebx
rep movsb
add MD5Index,ebx
.break
.endif
.endw
ret
MD5Update endp

align dword
MD5Final proc uses esi edi
mov ecx, MD5Index
mov byte ptr [MD5HashBuf+ecx],80h
.if ecx >= 56
call MD5Transform
MD5BURN
.endif
mov eax,MD5Len
xor edx,edx
shld edx,eax,3
shl eax,3
mov dword ptr [MD5HashBuf+56],eax
mov dword ptr [MD5HashBuf+60],edx
call MD5Transform
mov eax,offset MD5Digest
ret
MD5Final endp

end

ronald
15.01.2009, 18:39
Ссори за нескромный вопрос.. Ты ком файл пытаешься в Висте запустить?
Чур меня, чур! Нет конешно!

0verbreaK
15.01.2009, 22:07
SHP!ON Точка входа не определена, помимо реализации еще нужно вызывать
функции для подсчета md5, легче поискать другую реализацию

airyashov
15.01.2009, 23:57
SHP!ON это просто библиотечка помоему, скомпилировать в obj и вызывать из C++ например

-m0rgan-
19.01.2009, 22:42
Ре, адепты!
Посоветуйте хороший редактор дль асма,с хорошей подсветкой синтаксиса!
3арание спс!

Hellsp@wn
20.01.2009, 00:51
RadASM :)

0x0c0de
20.01.2009, 14:32
>>Посоветуйте хороший редактор дль асма,с хорошей подсветкой синтаксиса!

где-то я уже тут отписывалась. в этой теме вроде или где-то в этой ветке ))))) студия для этих дел есть. Negatory Assembly Studio. подсветка, хорошая!

slesh
20.01.2009, 16:44
А вообще вот тут вот описаны более менее нормальные ASM IDE
www.wasm.ru/article.php?article=ide

desTiny
21.01.2009, 13:41
RadASM :)
ага.

http://www.wasm.ru/article.php?article=ide

Ergoproxy
23.01.2009, 16:57
Notepad++ and Wasm32 и больше нех ненадо=)

vikseriq
29.01.2009, 21:37
Ergoproxy , истинно! отдаю свой голос за Notepad++ и winASM от мелкомягких. мой выбор.

mixkorshun
02.02.2009, 18:47
Source Insight и ASM Editor
1ый тяжеловесный редактор не только для асма(платный)
2ой бесплатный с подсветкой синтаксиса и добавлением своих keyword'ов. Главное - простота в освоении

0verbreaK
03.02.2009, 00:09
Notepad++ и winASM

Girsoft
04.02.2009, 11:37
набрал код на масме:
(директивы масма стараюсь сильно не использовать, приближенно к чистому ассемблеру)
.386p

.MODEL FLAT, STDCALL
; -------------------------------------------------------------------------
EXTERN MessageBoxA@16:near
EXTERN CreateWindowExA@48:near
EXTERN DefWindowProcA@16:near
EXTERN DispatchMessageA@4:near
EXTERN ExitProcess@4:near
EXTERN GetMessageA@16:near
EXTERN GetModuleHandleA@4:near
EXTERN PostQuitMessage@4:near
EXTERN RegisterClassA@4:near
EXTERN ShowWindow@8:near
EXTERN TranslateMessage@4:near
EXTERN UpdateWindow@4:near
EXTERN LoadCursorA@8:NEAR
EXTERN LoadIconA@8:NEAR

includelib lib\kernel32.lib
includelib lib\user32.lib

wndclass struc
classstyle dd ?
clwndproc dd ?
clscextra dd ?
clwndextra dd ?
clshinstance dd ?
clshicon dd ?
clshcursor dd ?
clbground dd ?
clmenuname dd ?
clname dd ?
wndclass ends

msgs struc
mshwnd dd ?
msmessage dd ?
mswparam dd ?
mslparam dd ?
mstime dd ?
mspt dd ?
msgs ends

.data
classname db 'ASMCLASS32',0
titlename db 'win win win hehehe',0
hinst dd 0
wc wndclass <?>
nhwnd dd 0
msg msgs <?>
cap db 'message!',0
textmess db 'r button!',0
textmess2 db 'CREATE!!!!',0

; -------------------------------------------------------------------------
.code
START:
push 0
call GetModuleHandleA@4
mov [hinst],eax

mov [wc.classstyle],4003h
mov [wc.clwndproc],offset wndproc
mov [wc.clscextra],0
mov [wc.clwndextra],0
mov eax,[hinst]
mov [wc.clshinstance],eax

push 32512
push 0
call LoadIconA@8

mov wc.clshicon,eax

push 32512
push 0
call LoadCursorA@8

mov wc.clshcursor,eax

mov wc.clbground,5
mov wc.clmenuname,0
mov wc.clname,offset classname
push offset wc
call RegisterClassA@4

push 0
push [hinst]
push 0
push 0
push 80000000h
push 80000000h
push 80000000h
push 80000000h
push 0CF0000h
push offset titlename
push offset classname
push 0
call CreateWindowExA@48

mov [nhwnd],eax

push 1
push [nhwnd]
call ShowWindow@8

push [nhwnd]
call UpdateWindow@4

msg_loop:
push 0
push 0
push 0
push offset msg
call GetMessageA@16
cmp ax,0
jz end_loop
push offset msg
call TranslateMessage@4
push offset msg
call DispatchMessageA@4
jmp msg_loop
end_loop:
push 0
call ExitProcess@4
; -------------------------------------------------------------------------
wndproc proc
push ebp
mov ebp,esp
push ebx
push esi
push edi

cmp dword ptr [ebp+0Ch],2h
jz wmdestroy

cmp dword ptr [ebp+0Ch],1h
jz wmcreate

cmp dword ptr [ebp+0Ch],204
jz wmrbutton

push dword ptr [ebp+14h]
push dword ptr [ebp+10h]
push dword ptr [ebp+0Ch]
push dword ptr [ebp+08h]
call DefWindowProcA@16
mov eax,0
jmp finish

wmcreate:
push offset cap
push offset textmess2
call mess
mov eax,0
jmp finish
wmrbutton:
push offset cap
push offset textmess
call mess
mov eax,0
jmp finish
wmdestroy:
push 0
call PostQuitMessage@4
mov eax,0
finish:
pop edi
pop esi
pop ebx
pop ebp
ret 16
wndproc endp




mess proc
push ebp
mov ebp,esp
push 0
push dword ptr [ebp+12]
push dword ptr [ebp+8]
push 0
call MessageBoxA@16
mov esp,ebp
pop ebx
ret 8
mess endp

END START

Он всего-то и делает, что создаёт окно, ну и пара обработок сообщений. Но вот проблема - функция сознания окна CreateWindowExA постоянно в ЕАХ возвращает 0, то бишь происходит ошибка - смотрел в отладчике. Не хочет создавать окно... В чём моя ошибка? Почему код не работатет? Всем Спасибо за ответы! ++++

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

Rag
08.02.2009, 00:48
Подскажите пожалуйста алгоритм, который
сможет убрать все нули в буфере
base64 не предлагать, запостил сюда
потому как делать хочу на асме...

o3,14um
08.02.2009, 08:00
можешь попробовать везде byte+1, а на выходе byte-1. Да много разных способов. И чем base64 не покатил?

0x0c0de
08.02.2009, 11:28
2Girsoft в wndproc


push dword ptr [ebp+14h]
push dword ptr [ebp+10h]
push dword ptr [ebp+0Ch]
push dword ptr [ebp+08h]
call DefWindowProcA@16
jmp finish


вот так надо. mov eax,0 уберите после DefWindowProcA.

Rag
08.02.2009, 12:40
o3,14um, byte+1 \-1
тогда FF->00 а шанс что FF встретится довольно велик

чем base64 не покатил?
http://wasm.ru/forum/viewtopic.php?id=31088

0x0c0de
08.02.2009, 12:52
2Rag
Хм, не понимаю, зачем что-то брать из пинча, когда есть реализации алго на асме.

http://wasm.ru/srclist.php

качайте cryptohash - там все есть. когда-то сама юзала реализации из этого сборника.

Rag
08.02.2009, 13:10
Хм, не понимаю, зачем что-то брать из пинча, когда есть реализации алго на асме.
эмм какбе там тож на асме, и 100% работает
Проблема не в том что вообще не работает а в том что не до конца...
Попробовал алго от ct757 и тож самое... Наверн я чего то не понимаю =\

0x0c0de
08.02.2009, 13:37
Посмотрела сорец на васме. После преобразования в base64 у вас размер будет не 65535. После перекодирования. например после кодирования "Hello" мы получаем "SGVsbG8A". А вы сколько считываете из файла, такой и буфер выделяете

Rag
08.02.2009, 14:02
Не пойму о чем вы....
Я выделяю буффер, размером 65535, но ведь его хватает чтобы записать файл
размером например 50... в случае с hello все норм выполняется
А вы сколько считываете из файла, такой и буфер выделяете
Или я не понял или это вы невнимательно прочли, в приведенной функции надо
передать 3 аргумента - длину данных(сколько считали из файла) и 2 буффера.

0x0c0de
08.02.2009, 14:24
Я так на код посмотрела, что вы читаете 65535 и столько же и выделяете в буфере, а этого, при размере файла >= 65535 может не хватить. Если же размер файла 50 байт, то все должно быть хорошо.

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

то есть вы закодировали 50 байт из файла и решили проверить правильно ли закодировали, преобразовав обратно. Тогда такой вопрос. А где процедура Base64Decode? Encode вы привели.

Rag
08.02.2009, 14:30
вы закодировали 50 байт из файла и решили проверить правильно ли закодировали, преобразовав обратно
ну взял чутка больше ~700
Base64Decode - на пхп, также пробовал стороннюю утилиту, все равно получается
на выходе файл меньшего размера + неправильно декодируется 2 половина файла

PS а какой еще мб выход для передачи информации на сервер?

0x0c0de
08.02.2009, 14:37
>> а какой еще мб выход для передачи информации на сервер?

Попробуйте хекс тогда, тут уже вообще полюбому проблем быть не должно.

>> неправильно декодируется 2 половина файла

скорее всего, трабла как раз при декодировании. Попробуйте Base64Encode/Decode в своей программе (в смысле все руками реализуйте), будет ли возникать такая ошибка. даже чисто ради интереса. Если скрипт/та "стороння утилита" раскодируют неверно, а у вас 2 процедуры кодирования/декодирования работают хорошо, то проблема уже не в вашем алгоритме.

__mad
08.02.2009, 22:12
>>Попробуйте хекс тогда, тут уже вообще полюбому проблем быть не должно.

а хекс 00 это не 0 чтоль? или ты имеешь ввиду в виде строки передавать?

проблема скорей всего в том что, при передачи закодированного бейс64 там присутвует "+" который заменяется на пробел, и поэтому происходит такая херня...
одно из решений на серваке в закодированном сообщение менять пробелы на +

desTiny
09.02.2009, 00:06
чё-то мне в голову приходит замечательная идея преобразовать хекс в строку) типа был текст в хексе: 15 26 00 17 F4
на выходе получаем строчку "15260017F4". м?

or1
21.02.2009, 05:07
помогите разобратся не могу скампелировать свою первую программу хелло ворлд
всегда выдает ошибку

http://imhost.ru/out.php/t20220_.jpg (http://imhost.ru/out.php/i20220_.jpg)

slesh
21.02.2009, 11:02
1) Где код этой проги?
2) Dos\Win32
3) Что за ошибка выскакивает?
4) Если ты имеешь ввиду примитивный HelloWorld из примеров с Fasm

include 'win32ax.inc'
.code
start:
invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!","Win32 Assembly",MB_OK
invoke ExitProcess,0
.end start

То ошибка чаще всего в include 'win32ax.inc'
а именно не найден этот файл. Потому что неопределены пути к ниму.
Как варианты решения:
1) указать полный путь до файла типа include 'c:\fasm\include\win32ax.inc'
2) настроить параметры окрыжения где в PATH добавить адрес к папке с инклудами типа c:\fasm\include\
3) Если компилишь через гуишный Fasm то в FASMW.INI
нужно прописать путь до папки
типа
[Environment]
Include=D:\Coding\fasm\include

or1
21.02.2009, 23:33
или сделай плз видео для начинаюющих именно с этой проблемой сталкиваются все начинающие ,например у меня виста я как-то загрузил масм32 с ней запарился показывала всегда ошибку писала типа место под регистер зарезервираванно и ошибка ,потом скачал фасм и так-же сделайте видео кто-нить по этой теме...

zeppe1in
21.02.2009, 23:54
Блин кто выложил видео "как зарегаца на античате"))

slesh
22.02.2009, 00:17
2 or1 Ты читаешь что я пишу или нет?????????????????

3) Если компилишь через гуишный Fasm то в FASMW.INI
нужно прописать путь до папки
типа
[Environment]
Include=D:\Coding\fasm\include

Вместо D:\Coding\fasm\include пропиши свой путь где у тебя это всё валяется.

ReScE11ER
10.03.2009, 17:58
у меня вопрос я новичок в программирование на асме так что подскажите как начать,какой софт нужен и статьи полезные?

St0nX
10.03.2009, 19:26
я начинал с Александр Крупник САМОУЧИТЕЛЬ ASSEMBLER а по поводу софта или еще чего там все описанно. Хотя к мамсму по симпотичней билдер найти можно.

-m0rgan-
10.03.2009, 20:33
у меня вопрос я новичок в программирование на асме так что подскажите как начать,какой софт нужен и статьи полезные?

Софт: текстовый редактнр,пойдёт ASMEDIT
Компилятор, выбирай лябой, различие в синтаксисе минимальное,я юзаю masm.
из литературы:
А.Крупник
Изучаем ассемблер,статейки с wasm.ru, когда изучиш переходи на К.Касперски
искуство ассемблера и дизасемблирования...

aka_k4
15.03.2009, 22:09
Все знают значение в CMD сомманды tree. Вопрос - мона ли результат показа этой команды записать в блокнот, либо записать любой аналог (лиш бы все дерево папок диска было видно) ?

P.S. небуду засорять топики, поэтому сли есть подобное решение на C++ плз в ПМ ога)

Chaak
15.03.2009, 22:11
tree C:\ >> file.txt

только с кодировкой надо поиграться)

aka_k4
15.03.2009, 22:24
ок спс
НЕ KOI8-R ?