Просмотр полной версии : [ASSEMBLER] Задаем вопросы (для новичков)
Да , я знаю , но и тот и другой отказываются компелить код
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 (на мой взгляд офигенная книга для начинающего).
зы. Пильщиков ведет в МГУ на ВМиК, так что мужик свой =) Кому надо могу скинуть лекции в печатном виде другого ВМКшного препода по асму, там теория + отличные практические примеры.
знающие ассэмблер подскажите пжлста ссылочки на более полные и более понятные учебники по ассэмблеру.... а еще лучше в добавок пару книг которые в магазине найти мона.... а то от монитора тока зрение испорчу...((((( за хорошую книгу плюсиком не обижу.....
знающие ассэмблер подскажите пжлста ссылочки на более полные и более понятные учебники по ассэмблеру.... а еще лучше в добавок пару книг которые в магазине найти мона.... а то от монитора тока зрение испорчу...((((( за хорошую книгу плюсиком не обижу.....
Лучшая книга по асму это книга Крупника имхо.
http://webfile.ru/1881580
чти на 2 поста выше) Пильщиков, Калашников, Пирогов (больше как справочник)
а может ктонибудь написать код ассэмблеровский для делфи (там мона вставлять в делфи) который будет умножать..... или откликнитесь люди которые знают и делфи и ассэмблер......
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;
Manoff брось ты уже Калашникова читать, его книга и рассылка была актуальна лет эдак 12 назад!!!!
Думаю ты врядли будешь писать резидента под DOS...
Скачай уроки изелона с wasm.ru и хотябы что-нибудь из этого списка:
И у тебя возникнет меньше проблем..
Уроки Iczeliona весьма интересный материал для новичков в WinAPI, но никак не как самоучитель по ассемблеру. Мало того что самому ассемблеру там, что естественно и правильно, никакого внимания как языку не уделяется, так там еще и возможности его раскрыты самым минимальным способом.
Мое искреннее убеждение что уроки напрасно написаны на ассемблере - было бы намного удобнее читать их на С, а эффект был бы тем же самым. Впрочем надо сказать что ассемблерный код в силу его наглядного оформления тоже читается хорошо. Но именно из-за наглядности этого кода, смысл выбора языком - ассемблера вообще нивелируется.
Кроме того по WinAPI есть множество вполне неплохих как русскоязычных, так и англоязычных руководств. Некоторые англоязычные руководства хорошо переведены, так что смысл читать Ицзелиона когда есть Сишные альтернативы фактически теряется. Тем более что после усвоения основ логики работы Windows-приложений, лучшим руководством в дальнейшем служит MSDN.
Что же касается самого ассемблера, то изучать его как раз под ДОСом - самое то. Или писать на нем голые консольные приложения/драйвера - тоже нормально. Только в целях обучения. На практике он и здесь уже сдал свои позиции языкам высокого уровня. Писать оконные программы на ассемблере - себя не уважать!
Что касается книг по ассемблеру, которые понравились мне, то это:
Зубков - классная книжка - советую!
Юрова - не читал, но должно быть ничего. Его я обычно использую как простенький справочник.
Пирогов две книжки "учебный курс" и "дизассемблирование" - довольно содержательный курс, но первая без второй опять-таки не все, вместе две книжки как раз образуют то что надо, и даже немножко лишнего (из "дизассмблирования")
Есть еще книжка автора не помню сейчас название примерно такое: программирование аппаратных средств для windows - там по-моему есть некоторые практические стороны работы с оборудованием через порты прерывания, dma и все в таком роде.
Вот это и есть ассемблер, а cmp eax,ebx;jz _label само по себе в оконной процедуре сегодня никому уже ненужно.
По-моему есть еще какая-та литература которая мне очень понравилась, но точно не помню сейчас. Главное не хвататься за все эти книжки - а взять и прочитать какую-то одну (Зубков?) а дальше остальные читать уже не придется - пробежать глазами и с книжкой уже ознакомился, потому что содержания в них, конечно, пересекаются.
Если же вы планируете писать на ассемблере полноценные программы или хотя бы и модули, то надо еще ознакомиться с какими-нибудь свежими материалам по оптимизации. Потому что без оптимизации использовать ассемблер для ЭВМ сейчас практически никогда не имеет смысла. А сама оптимизация сильно зависит от реализации конкретной ЭВМ.
а правда то что код на ассэмблере выполняется быстрее чем на делфи или си....
домустим для такой цели как перебор хешей md5 код ассэмблера будет работать быстрее? я просто мало то знаю по ассэмблеру начал читать Крупника интересная книга но на ней нумаю не остановлюсь...))) ну дак как всетаки на счет вопроса?
а правда то что код на ассэмблере выполняется быстрее чем на делфи или си....
домустим для такой цели как перебор хешей md5 код ассэмблера будет работать быстрее? я просто мало то знаю по ассэмблеру начал читать Крупника интересная книга но на ней нумаю не остановлюсь...))) ну дак как всетаки на счет вопроса?
Вранье,копилятор генерит ассемблерный код,тут уже все зависит от алгоритма.
zl0y да я знаю но ведь согласись что в некоторых слуячаях компилятор делфи к примеру довольно таки тупо переводит и код который может уместиться к примеру в 10 строчках умещается в 15 а то и в 20...
но я считаю что каждому из нас обязательно надо, хотябы чуть чуть (основу), знать ассэмблер!!! с ним жизнь станет намного легче (поимите правильно я не имею ввиду все дружно пишем все на асэме я имею ввиду что вообще занимаясь ИТ и не зная ассэмблера понимание немного другое.....))))))) я сам короче запустался)))))))) :-D)
kir@pro, новичку врядли удасться бороться с компилятром Делфи или C++!! Можно оптимизировать процентов на 10 максимум... На самом деле оптимизировать лучше алгоритм...
но я считаю что каждому из нас обязательно надо, хотябы чуть чуть (основу), знать ассэмблер!!! с ним жизнь станет намного легче
конечно, когда ты знаешь во что преобразуется If или While легче на душе)))
перевел пример из сишного в фасм
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 и выполнение продолжается , на Си работает , а тут зацикливается
Где я накосячил?
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
Работало, пока не завопил нод и не удалил файл =\\ епанутый какой то =\\
как такая 'конструкция' в фасме выглядит?
code1 label byte
db 68h
Hooker1 dd 0
db 0c3h
68 00 00 00 00 = push 0
С3 = ret
Если я правильно понел вопрос :)
в Hooker1 запишется адрес обработчика ,
чтобы затем WriteProcessMemory,-1,[EntryAdress], code1 (без offset прим фасм) ,code1_size,0
а фасм такую директиву (code1 label byte) не принимает :/
как такая 'конструкция' в фасме выглядит?
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
Тем более аверов и файеров привлекать вызовом WriteProcessMemory. :)
Лишние подозрения
Да, кстати, на всякий случай: вот так делать вроде бы нельзя (раньше нелбзя было точно, сейчас, скорее всего, тоже - давненько я таким не занимался :) ):
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.
desTiny Да от препроцесора зависит. на masm думаю и первый вариант будет норм...
Не знаю как раньше, но сейчас
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
Подскажите пожайлусто где найти список Api функций с как можно подробным описанием и примерами для начинающих
http://msdn.microsoft.com/en-us/library/aa383723(VS.85).aspx
Можно привести в пример исходник который открывает файл и выводит его содержимое. Мне для примера что бы узнать как обращаться с функциями.
http://wasm.ru/article.php?article=1001012
http://wasm.ru/article.php?article=1001013
на сколько помню не выводит, но работа с файлами показана
может ктонибудь сказать как написать загрузочник для винды.... по виду допустим такой де как у windows xp но всегда с меню.....
и если ктонить даст ссылочки по загрузочникам и их написанию буду очень благодарен...))))
взять и написать. перейти в защищенный режим, загрузить ядро в память, Hal, ветки реестра нужные, загрузочные драйвера и проинициализировать все это дело
_Great_ ммм это я понимаю я про код говорю...!!!!! ты думаешь еслиб я знал как написать код и не знал как это все идет поп порядку(то что ты обьяснил) я бы стал здесь спрашивать?
ты долбанулся такое самому писать?
эта тема вопросы для новичков.. ты с какой башни упал
ЗЫ. ты в первом посте всетаки спросил как написать, а не написать за тебя. или ты так часто меняешь свои слова?
push ax
push dx
lea dx, Str
mov ah,0ah
int 21h
pop dx
pop ax
эт кусок для ввода строки.. подскажите как узнать количество введенных символов мне, и занести в регистр ето число символов?((( очень прошу просто как узнать длину строки, на тасме.
в статье 'От зеленого к Красному' в примере сплайсинга на масме дан код остановки потоков , перевел в фасм , при 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
Пиздец.. ну скажите как длину строки вычислить =(((((((((((((((((((((((((
push offset str
call [lstrlen]
или rep scasb
либо мой способ,повторять пока байт не будет равен = 00.
Jes, держи сорц http://pastebin.x3k.ru/388
Исправил ряд детских ошибок на синтаксис, коечто оптимизировал, сделал код читабельным... компелируй
Компилирую фаил , выдаёт ошибку :
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
---------------
что нетак ?
1. код нужно вставлять в теги CODE
2. Для подобных вопросов существует тема https://forum.antichat.ru/thread40850.html
3. раз уж ты всетаки здесь запостил... скинь бат-файл для компиляции, который ты используешь... меня смущает link /SUBSYSTEM:CONSOLE "1ll.obj"
4. после flat запятая
ml /c /coff "%1.asm"
link /SUBSYSTEM:CONSOLE "%1.obj"
я уже подзабыл масм, но разве не так?
ml /c /coff 1.asm
link /SUBSYSTEM:CONSOLE /LIBPATH:c:\1.obj
Непомогает ....
------
Люди добрые и злые , накачал я кучу книг по асме и чёта както ниодну непонимаю , где команды гдепеременные , неужели я , такой тупой , или увсех так было в начале ...
посоветуйте как мне быть , мож книжку какуюто особенную . пожалусто ..
Книга посвящена основам программирования на ассемблере в системах 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
Повторюсь .. Компилирую фаил :
.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
Не стоит так говорить, если одни не помогают - это не значит что и все такие злые и корыстные. И если все форумы - это гомно, хуле вы сидите тогда в этом гомне? =\ фсадкороче =\
Уря я написал для курсача 2 проги уря)
в итого для вычисления длины строки я юзал ээээ с десяток строк левого кода но вот есть такое:
ReadStr StrHead
mov al, StrHead+1
ReadStr- мой макрос для ввода строки, а вот дальше помешается в al строка +1, тоесть вроде как длина строки. Но вот вопрос как мне потом ей пользоваться, в ax она как бы и нехраниться и тп, карочи я немагу его занести в другие регистры, допустим командой такой:
mov dx, al
так нельзя, но можно так:
mov dl, al
почему нельзя 1 способом?=\
я непойму матиматику обьясните ктото шо тут за матиматика, обьясните как в каком формате там записана длина строки, в al и тд...?=(
Уря я написал для курсача 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
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 Я бы посоветовал начать с простого САМОУЧИТЕЛЯ Assembler.
Книги можно взять тут -> forum.antichat.ru/thread31398.html
Подскажите кто-нибудь, где можно почитать про структуры данных Bios и Dos? И где можно узнать про состав, назачение и длину данных в Ms-dos
2 > ASERVIC
[cod e][/cod e]
А можно поподробнее, пожалуйста?..
alextoun
04.06.2008, 11:58
1)
Пусть задан текст, представляющий собой последовательность строк.
На каждой строке находится имя, фамилия и отчество.
Распечатать отчества по алфавиту,
а также текст, содержащий строки, состоящие только из имен и фамилий.
*Распечатать = вывести на экран.
2) В некоей фирме работают 7 сотрудников -
сборщиков компов.
Для того, что бы повысить производительность их труда,
в компьютер в конце каждой недели заносят количестово компов,
собранных каждым сборщиком за неделю за каждый день.
Вывести на печать (читай - экран) - наибольшее кол-во компов,
собранных одним сборщиком за неделю,
среднее за день количество компов,
лучшее за день количество компов и номер сборщика,
3)
Пусть файл содержит результаты измерений
температуры воздуха, которые проводились ежедневно весь декабрь. Определить и записать в создаваемый новый файл: среднемесячнуу температуру декабря, сколько раз (дней) была выше нуля, самый холодный день декабря, самый теплый день, сколько раз температура в декабре меняла знак.
блин можете кто-нибудь сделать
alextoun -> fasm , masm ? (можно msvcrt подключить и через переходники всё резко упростится)
alextoun -> fasm , masm ? (можно msvcrt подключить и через переходники всё резко упростится)
Без msvcrt тут за*бёшься...
alextoun, тебе куда такие занудные программы нужны?
PS Если до того момента, как я освобожусь, никто не поможет, то напишу чё-нть...
alextoun
04.06.2008, 15:05
Tasm
alextoun, тебе куда такие занудные программы нужны?
а ты угадай :)
Tasm
???
Тебе что, под дос надо? через прерывания?? А кто их сейчас помнит?... Изващение...
0verbreaK
04.06.2008, 21:09
???
Тебе что, под дос надо? через прерывания?? А кто их сейчас помнит?... Изващение...
Не помнят, но юзают интерапт лист.
Не помнят, но юзают интерапт лист.
блин, я правда уже ничего оттуда не помню... и в интеррапт листе тоже искать что бы то ни было весьма занудно... а галавное - непонятно зачем!
я помню только
mov ah, 4Ch
int 21h
Конечно, многое там через int 21, но как выводить вещественные числа - только используя последовательные div'ы? или есть что-нть из интов?
Кстати, напомните кто-нибудь, что там в тасме с математическим сопроцессором?
0verbreaK
04.06.2008, 21:27
Кстати, напомните кто-нибудь, что там в тасме с математическим сопроцессором?
Не понятен вопрос, тебя интересуют математические команды сопроцессора?
Не понятен вопрос, тебя интересуют математические команды сопроцессора?
в смысле он там реализован или нет? Эх... плохо я помню историю...
Так, третья задачка без ввода-вывода (писал в блокноте, идея такая, но могут быть ошибки синтаксиса):
переменные:
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" знак температуры не меняется
Нужен совет знающих людей.
Вопрос о видеосервисе VGA (он же находится в прерываниях BIOS 10h), номер функции 11h.
как я заранее понял в этой функции есть 4 подфункции. (по ходу которые отвечают за установку видеопараметров)
вот часть кода программы, (которая создает и загружает свой символ в знакогенератор) что устанавливает видеоадаптер в какой нить режим (здесь в 3-ий):
--------
mov ah,0
mov al,3
int 10h
--------
собственно вопрос:
1) правильно ли осуществляется переключение видеоадаптера в 3-ий режим?
2) дайте подробное описание других режимов и особенности их применения
ps/ немного знаю о нулевой функции (al = 0), при использовании которой данные определенные программистом переносятся с памяти в спец блок символов.
Заранее спасибо.
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
Только начал изучать, 2 глупых вопроса.
1)Зачем нужен отладчик?
Если для проверки написанного, то, что бы я не писал он выдает однои то же Unknow command
Например пробовал присвоение регистру ах
mov ax,10h
ну или mov ax,0Ah
и
2)Вопрос, как сохранить программу в MS-DOS..?
ПС на форуме поиск юзал, скожих тем\сообщений не нашел..)
прочитав вопросы уместно будет спросить:
а ты с помощью чего(какого отладчика) и что отлаживаешь(com, exe, dll)?
меня смущает: сохранить программу в MS-DOS
ЗЫ: в гугл вбей: "Что такое отладчик?"
прочитав вопросы уместно будет спросить:
а ты с помощью чего(какого отладчика) и что отлаживаешь(com, exe, dll)?
меня смущает:
Прочитав вопросы уместно будет ответить на них, т.к. тема для новичков, а новичок здесь - я.
Спрашивать у новичка про то, о чем он не знает - не поддается логики.
Представь, что я в 1м классе а ты в 9м, и спрашиваешь у меня как решать логорифмы,ога?
Жду адекватных постов..
Ну или сам разберусь.
Кстати, "только начал изучать" - имеется ввиду, что читаю Ассемблер для чайников - 4-5часов.
Тебе это о чем нибудь говорит,нет?
ЗЫ: в гугл вбей: "Что такое отладчик?"
ЗЫ: В гугл вбей: "мозг - как часть организма."
1) Ты пишешь, что написал простейшую программу, которая кладет в регистр AX 10h! Попытался открыть её с помощью отладчика! А он пишет, что комманда неизвестна! Вот я и спрашиваю: "Что за отладчик ты используешь!"
2)
>>Вопрос, как сохранить программу в MS-DOS..?
Я не понимаю вопроса! Может быть ты хочешь скомпилировать программу в *.com!?
Следую банальной логике, ты мог отрыть только OllyDbg! А она отлаживает только 32bit программы тоесть EXE, а не COM!
Вот я и задаю вопросы какого хера ты делаешь... Чтоб объяснить что ты делаешь не так!
ЗЫ: В гугл вбей: "мозг - как часть организма."
не груби мне! я те помочь пытаюсь между прочем! не*** тупые вопросы задавать, на которые можно без труда ответы найти!
Лучше не трогай MS-DOS и вообще сразу начинай с винды... Потому дос - это уже все муть практически ненужная (мое имхо). читаем
http://wasm.ru/publist.php?list=1
Отладчик - ollydbg. Самое то.
http://ollydbg.de/
Ну и в реверсинг почаще заглядывай. там на эту тему инфы полно
Прочитав вопросы уместно будет ответить на них, т.к. тема для новичков, а новичок здесь - я.
Спрашивать у новичка про то, о чем он не знает - не поддается логики.
Представь, что я в 1м классе а ты в 9м, и спрашиваешь у меня как решать логорифмы,ога?
Жду адекватных постов..
Ну или сам разберусь.
Кстати, "только начал изучать" - имеется ввиду, что читаю Ассемблер для чайников - 4-5часов.
Тебе это о чем нибудь говорит,нет?
ЗЫ: В гугл вбей: "мозг - как часть организма."
По-моему, ты хамеешь...
Сорри, ща просто сессия.. по 8ч. занятия, крыша едет. х_Х
Прога AFD pro.
Программу для начала хочу в MS-DOS сохранить, что бы проверить на работоспособность
Так отладчик нужен для перевода в разные расширения или для проверки на предмет ошибок?
Лучше не трогай MS-DOS и вообще сразу начинай с винды... Потому дос - это уже все муть практически ненужная (мое имхо). читаем
http://wasm.ru/publist.php?list=1
Отладчик - ollydbg. Самое то.
http://ollydbg.de/
Ну и в реверсинг почаще заглядывай. там на эту тему инфы полно
Спасибо большое..
Ща полазию.
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
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;
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 и все.
Надо знать почему и как что возникает, попробуй скомпилировать пример своего кода:
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
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
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 градусов
... суть сводится к тому что таблица одна .... а используется так же и для получения синуов на правилах тригонометрии
/// если предстоит защита то посмотри матрицу поворота в инете полно описаний
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 (?)
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
Почему-то не отправляет пакет
должен по идее отправлять на 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'
есть код -
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
Можешь привести полный код или программку.
Можете дать исходник антивируса на delphi 7 ( жилатильно с каминтариями )
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,2424
invoke CreateRemoteThread,eax,0,0,mes,0,0
а VirtualAlloc/WriteProcessMemory забыл?
а 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'
Помогите найти ДОКИ, чтобы подробно понять архитектуру процессора. Начинаю изучать асм - пока тяжело даётся. Ещё было бы неплохо, если бы статей подкинули интересных.
всё кто откликнется - огромное спасибо!
>>Помогите найти ДОКИ, чтобы подробно понять архитектуру процессора. Начинаю изучать асм - пока тяжело даётся. Ещё было бы неплохо, если бы статей подкинули интересных.
всё кто откликнется - огромное спасибо!
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
спасибо, а без 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'
Просто так вывести нельзя. так число - это не строка.
Поэтому нужно перевести из числа в строку. Можно сделать это вручную, но лучше юзать 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
и снова я с косяками:
хочу вывести 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)
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:
не , мне как раз все процессы нада просмотреть (скорее всего поочередно) , хотябы через тулхэлп ...
, а хотя , во ,лучше через NtQuerySystemInformation попробую , а затем exe по pid'у как в примере...
ps: anyway , thanks
не , мне как раз все процессы нада просмотреть (скорее всего поочередно) , хотябы через тулхэлп ...
, а хотя , во ,лучше через NtQuerySystemInformation попробую , а затем exe по pid'у как в примере...
ps: anyway , thanks
хошь на cpp дам исходник по проверке всех процессов и определению заметных через NtQuerySystemInformation?
вот: http://webfile.ru/2075644
пасс: Jes
Всем привет.
Я тут немного асм начал... ну понимаете. Ошибка какаето вылезла. Немогу скомпилить. Скачал масм. версия: "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)
Всем привет.
Я тут немного асм начал... ну понимаете. Ошибка какаето вылезла. Немогу скомпилить. Скачал масм. версия: "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)
дай исходник асм файла
дай исходник асм файла
Да здесь типа программа "Хелло ворд".
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin
линкуй линкером который в папке binr (при установке необходимо указать что нужно ставить и winNT и win9x версии) находится. Мне это помогло.
У мну трансляторолинкер ml.exe сразу после переноса линкера из binr подхватил его самостоятельно.
Если не подхватит транслируй с опцией /c
и линкуй руками, чтобы получить .com, линкуй с опцией /t
btw, имхо под рассылку Калашникова лучше использовать TASM - проблем меньше будет ^____^
ml.exe hello.asm /AT - по идее должен работать
ЗЫ Конпелятор должен быть 6.11-6.13, т.к. компоновщик должен быть 16-битным
ЗЫ Конпелятор должен быть 6.11-6.13
А чем 6.14 плох?
2xGOR
ничем, он наверное имел ввиду что masm < 6.11 использует masm.exe и link.exe
а версии => 6.11 так как выше написано было через ml.exe
скачай asmed - полезная штука, и с компилятором проблем не будет, и удобно
туплю не подецки
bl = 1Ah, al = 69h
div bl
ax = 104h
Почему? должно быть 4?
ЗЫ ступил. там ведь остаток в ah?
ЗЫ ступил. там ведь остаток в ah?
Деление "слова на байт". Делимое находится в регистре AX,
а делитель - в байте памяти или а однобайтовом регистре.
После деления остаток получается в регистре AH, а частное -
в AL. Так как однобайтовое частное очень мало (максимально
+255 (шест.FF) для беззнакового деления и +127 (шест.7F) для
знакового), то данная операция имеет ограниченное
использование.
(с) ассемблер абель
-=Vlad=-
01.08.2008, 14:23
объясните компилятор подбирают по разрядности процессора или по разрядности ОС.
например у меня Amd +64
Бери Fasm обычный 32-х битный под винду.
В любом случае он будет поддерживаться 32\64-битными процами\ОС
А там уже в самом фасме при компиляции проги выберишь под что компилить
-=Vlad=-
04.08.2008, 20:26
благодарю,ни где толком не написано
metaldisc
06.08.2008, 20:43
что подключать в фасме, чтобы не прописывать вручную импортируемые функции
Приветствую! Кто может дать пример перехвата прерывания(желательно комментированый), а то теоретически понимаю как, а написать проблема...
0verbreaK
07.08.2008, 02:37
w_2k можешь подробнее DOS или Windows
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 int 2eh
Вобще то это не виндовое sysenter никаким боком не относиться к ней,в винде все сделанно посредством хуков.
тыб еще сказал out или int 21 :)
как скрыть вызов АПИ ф-и?
пробовал использовать метод Криса(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 валится на стадии выполнения.
в чем бок?
и какие еще есть способы скрытого вызова АПИ?
Хорошо, я примерно тут подразобрался...Но у меня вопрос, как узнать адрес нужного прерывания, адрес функции, как подставить свой адрес и с какое по какое место прогу надо оставлять в памяти?
Juda скрытие таблицы импорта или речь идет о другом?
как скрыть вызов АПИ ф-и?
пробовал использовать метод Криса(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
0verbreak, у тебя случаем инфы по перехвату досовский прерываний нет?)
0verbreak, у тебя случаем инфы по перехвату досовский прерываний нет?)
если мне не изменяет память, инфа с примерами есть в книге Абашева "ассемблер в задачах защиты информации". как дома буду - гляну точно, у меня бумажный вариант..
Это не метод криса. Это стандартный метод применяемый в вирусах. Только с той разницей что в вирусах не используется плейн название ф-ций а их хеш 32. Полиномы не стоит пробовать для хеширования новые подбирать - все нормальные уже посчтитали. Почитай статьи билли из 29а, на васме есть в вирмейкинге.
0verbreaK
08.08.2008, 20:01
w_2k на сайте калашникова в какомто уроке есть перехват прерывания
О! Нашёл:-) Ток не совсем всё понял)
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 Справочник Ральфа Брауна + Оля в руки и исследуй )
Пробовал все что советовали по скрытию апи, всеравно палится антивирями. Вот только руки не дошли до 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
после загрузки программы в отладчик на верхушке стека лежита адрес возврата на kernel32.dll
не обязательно в отладчик
; т.е. мы извлекаем базу кернела
не базу, а какойто адрес внутри kernel32.dll
можно искать API функции по ординалу
ненадежно, ординал может отличатся в зависимости от весии библиотеки, лучше по хешу от имени
Народ, кто нить подскажите плиз простейший генератор чисел в 16 битах? Пытался использовать миллисекунды, но функция 2c прерывания 21 ничего не возвращает:(
Народ, кто нить подскажите плиз простейший генератор чисел в 16 битах? Пытался использовать миллисекунды, но функция 2c прерывания 21 ничего не возвращает:(
тебе нужен код генерации псевдо-случайных чисел для дос?
Ну, в принципе да.
Простой:
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а, тоже был код генерации для дос .
О! Спасиба) Пошёл тестить)
----------------------------------------
Странно, MASM короткий не хочет компилить....ругаецо, мол не известная операция(in)
А вот длинный работает как часы, завтра буду разбираться что к чему. Спасиба еще раз
О! Спасиба) Пошёл тестить)
----------------------------------------
Странно, MASM короткий не хочет компилить....ругаецо, мол не известная операция(in)
А вот длинный работает как часы, завтра буду разбираться что к чему. Спасиба еще раз
у тебя масм какой версии? =)
у тебя масм какой версии? =)
Версия 6.11. Выкидывать пора? =)
Нет, старше если не ошибаюсь не линкует Дос код, а если для вин32апи, то лучше конечно юзать масм10 =)
Подскажите, пожалуйста, можно ли добиться улучшения быстродействия программы, если попутно использовать FPU. То есть, к примеру, я создаю через CreateThead еще поток, делаю в него вставку asm{} и работаю через FPU, пока тоже самое делает центральный процессор. Пишут вроде как при работающем FPU центральный проц работает отдельно. Еще также интересно вот что: количество FPU зависит от количества ядер проца?
Право даже не знал в какой раздел задать вопрос...
Только сейчас осознал, что не все написал.
Есть два потока. В первом случае. Они просто суммируют числа. при помощи add. Во втором случае первый поток делает все через add. а второй через fld, fadd, fstp.
Надо сравнить быстродействие.
Доброго времени суток.
1)просьба показать пример собственного (програмного) заполнения векторной таблицы прерываний
2)если это возможно, то и смена местами в таблице аппаратные прерывания Nmi и Intr.
хотелось бы увидеть часть кода на асме которая отображает вышеизложенное.
если есть интересные линки по реализации прерываний и их использование на асме буду оч благодарен.
Заранее спасибо.
Cecil B Demented
12.09.2008, 15:40
Хай всем, ребят подскажите плз код простенького на асме - хватание аргументов из командной строки и выполнение их в коммандной строке. У мну аргументы не ловит совсем :( помогите плз :(
C:\masm32\get.exe netstat -a >> C:\log.log
Хай всем, ребят подскажите плз код простенького на асме - хватание аргументов из командной строки и выполнение их в коммандной строке. У мну аргументы не ловит совсем :( помогите плз :(
C:\masm32\get.exe netstat -a >> C:\log.log
Не понял вопроса, но мб invoke WinExec,...
GetCommandLine, откидуешь имя файла, чтоб остались только аргументы(вручную либо CommandLineToArgvW+lstrcatW, либо исчо както). то, что получицо пинаешь в WinExec
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
и как 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
и как CreateProcess должен реагировать, когда получает комманду на запуск >> ?
никак, потому что он ее не получает. Можешь проверить, GetCommandLineW возвращает строку без >>
создавать батник - это уже совсем неоптимально. Например если не будет прав на запись в текущую директорию то утилита не сработает
использовать VirtualAlloc для выделения небольших объемов памяти не очень правильно, т.к. размер выравнивается по размеру страницы
никак, потому что он ее не получает, поэтому и нужны кавычки.
насколько йа понимаю >> это жизненно важный оператор в данной строке, который указывает, что надобы записать вывод нетстата в файл. будет ли достигнут этот результат при использовании твоей проги - нет.
а >> криэтпроцес получает на втором витке цикла.
использовать VirtualAlloc для выделения небольших объемов памяти не очень правильно
а йа вроде и выделяю 4кб строницу, в чем вопрос?
создавать батник - это уже совсем неоптимально. Например если не будет прав на запись в текущую директорию то утилита не сработает
оптимальнее самому выявлять >, >> и подобные штуки и соответствующим образом на них реагировать?
сделой, чтоб создовалось в темпе, туда доступ вроде как всегда есть.
насколько йа понимаю >> это жизненно важный оператор в данной строке, который указывает, что надобы записать вывод нетстата в файл. будет ли достигнут этот результат при использовании твоей проги - нет.
почему не будет? еще как будет;)
а йа вроде и выделяю 4кб строницу, в чем вопрос?
в том что страницы не всегда по 4 кб
оптимальнее самому выявлять >, >> и подобные штуки и соответствующим образом на них реагировать?
вообще-то >>, > и им подобные выявляет система, так зачем писать лишний код? GetCommandLineW возвращет строку уже без них (если они не были заключены в кавычки) и любые попытки выявить их закончатся неудачей.
сделой, чтоб создовалось в темпе, туда доступ вроде как всегда есть.
создавать бат-файл вообще нет необходимости
Cecil B Demented
13.09.2008, 15:46
bons так же обрывается поток ">>" ну или ">" создаёт пустой файл :(
;запустить
invoke WinExec,szfile,SW_SHOW
это в моем кодесе подправить надо. после этого
prog.exe "netstat /a > asd.txt"
создается непустой файл.
кто чем может помочь по теме
http://forum.antichat.ru/showpost.php?p=856928&postcount=417
просьба отписать. очень нужно реализовать замену прерываний. спасибо.
(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 ? Загадко =_=
(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? - была найдена уязвимость и был написан эксплоит (собственно вирус) публика узнала что существует такая уязимость а если существует хакер который нашел брешь в биосе и способен получить доступ на запись
хакер который нашел брешь в биосе
ведь для того чтобы биос перепрошить как бы не надо искать в нем уязвимости
0verbreaK
26.10.2008, 20:41
bons ты считаешь что вирус может перепрошить биос,?!
конечно, ведь кто тебе запрещает реверсировать любою из утилит для перепрошивки и использовать ее код, проблема в том что этот код будет совсем не универсальным.
перепрошить можно и не только биос
К примеру Грег Хоглунд писал о руткитах, встраивающихся в прошивку сетевой карты. Конечно это будет аппаратно-зависимый руткит, который пишется для одного конкретного случая. Я пока не занимался таким программированием поэтому только лишь порекомендую книгу этого автора
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,а можно нескромный вопрос?
Вас ебать и ебать бы,что же вы делаете вернее,что вас привело на хеккерский форум?
:))) Как нескромно-то...Увлечения привели)
Стеклавата, встречный вопрос: Вам бы е..ть и е...ть, что вас привело на хэккерский форум?)))
Удали скорей ссылку ато появятся новые мегаприватные пинчи by Deffa4ka ;)
этих ссылок в инете море так что смысл
если так нужно могу выложить исходник всех пинчей за исключением 2,99
а писать то хотел тот написал, там просто можно добавить новые модули, например для ворования пароля от квипа который есть в 2,99,
нужно только указать алгоритм расшифровки,
чуть не забыл обязательно нужно изменить алгоритм шифровки отчета (модуль xor). как только ты изменишь вариант криптовки придеться менять
парсер так как именно это и отличает парсеры
можно конечно написать пограмку которая будет раскодироавть отчет зная как способом он закриптован и криптовать его по новой используя модуль хор который идет в комплекте с билдером.
Horoshaja_devo4ka
01.11.2008, 09:08
могу выложить исходник всех пинчей за исключением 2,99
Хорошо бы:)
Тема относиться к программированию а не к распростронению пинча стукни в асю 598926
дам все версии и для сравнения хинч,
pinch258 pinch257 pinch1.1 Хинч pinch260 это все что есть в исходниках
думаю билдеры тебя не интересуют (я имею в веду редакторы)
крыша едет плз помогите...
теперь по теме:
_h DD ? ;размер _h 4 байта!
внимание вопрос! как через регистры присвоить _h значение?
Примечание: использую masm (он 16ти разрядный)
MOV _h, EAX
не предлагать, там нет eax :(
крыша едет плз помогите...
например так
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
расскажите мне, пожалуйста, как компилировть в turbo assembler?
http://amonit.sulfurzona.com/index.php?art=40
Anutka, так будет проще...
delay(0)
22.11.2008, 15:46
не предлагать, там нет eax :(
Это 32-разрядный регистр. ah,ax,al тебе в помощь.
Банальный вопрос ,
FASM
Есть адрес Буфера MyBuffer (выделенного через HeapAlloc )
как обратиться по адресу внутри переменной содержащий адрес буфера? тоесть например как 10й байт самого буфера поменять на свой байт ?
FASM
Jes, как-то так
mov byte ptr [MyBuffer+10], ah
fasm ptr принципиально понимать не хочет :/
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
Ребят, кому не жалко и если есть свободное время. Думаю тем кто знает asm это будет достаточно тривиально..
на TASMе
на консоль вывести просто любые положительные и любые отрицательные числа...
Буду благодарен=)
[Актуально до 29.1108]
Ребят, кому не жалко и если есть свободное время. Думаю тем кто знает 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 в других случаях
Buffalon
cmp x, 5
jbe ELSE
cmp x, c
jne ELSE
mov y, 10
jmp CONT
ELSE: mov y, 12
CONT: ...
Доброго времени суток. Надеюсь кто-то из здесь присутствубщих имел когда нибудь дело с отладочным стендом 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, при еще одном нажатии "бегущий огонь" должен остановиться, при еще одно - дальше "побежать"....
думал две пары как сделать(даже на С++ пытался) - не могу...
Помогите плиз...
Ребят, есть вопрос по небольшой проге. вот код:
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.
Ребят, помогите пожалуйста... Через консоль должно вводиться шестнадцатиричное число. Для ввода использую 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 бинарь свой скинь
Ребята, кто может помочь изучающему асм немного? Литература конечно есть, но это немного не то, практики нет, в которой и познаётся теория. Если вдруг в ком проснулось альтруистичное начало - чиркните мне в icq 192693716
StealthMaster
11.12.2008, 04:41
Подскажите, пожалуйста, как работать с введенной строкой как с десятичным числом?
также как и с обычными числами, но предварительно переведя его из строки в число.
Алгоритм перевода примерно такой:
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
парни, есть проблема с открытием файла (tasm)
1. делаю файл hook, кладу в папку где лежит мой скомпилированный .com
2. в самой проге основной код такой:
mov ax, 3D02h ;открыть файл на чтение и запись
mov dx, offset fn
int 21h
...
fn db "hook",'0' ;имя файла
после этого в ax оказывается цифра 05h что, судя по зубкову, означает - доступ запрещен.
Почему??
2Kaas
бугога ))) имя файла у тебя hook0[много всякого мусора]x00
Делай так :
fn db 'hook',0
Хотя странно, должен был вернуть 02h :/
Открой отладчик (codeview хотя бы) и посмотри, что у тебя в регистрах на каждом шаге.
Да ещё, когда ты запускал прогу свою, был ли открыт гденибудь ещё этот файл ... пока всё, что пришло в мою больную голову :\
народ, у меня проблема, причём очень странная:
запуская 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
Я неособо разбираюсь в 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
Ссори за нескромный вопрос.. Ты ком файл пытаешься в Висте запустить?
Чур меня, чур! Нет конешно!
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 :)
>>Посоветуйте хороший редактор дль асма,с хорошей подсветкой синтаксиса!
где-то я уже тут отписывалась. в этой теме вроде или где-то в этой ветке ))))) студия для этих дел есть. Negatory Assembly Studio. подсветка, хорошая!
А вообще вот тут вот описаны более менее нормальные ASM IDE
www.wasm.ru/article.php?article=ide
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
набрал код на масме:
(директивы масма стараюсь сильно не использовать, приближенно к чистому ассемблеру)
.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 ....
Подскажите пожалуйста алгоритм, который
сможет убрать все нули в буфере
base64 не предлагать, запостил сюда
потому как делать хочу на асме...
можешь попробовать везде byte+1, а на выходе byte-1. Да много разных способов. И чем base64 не покатил?
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.
o3,14um, byte+1 \-1
тогда FF->00 а шанс что FF встретится довольно велик
чем base64 не покатил?
http://wasm.ru/forum/viewtopic.php?id=31088
2Rag
Хм, не понимаю, зачем что-то брать из пинча, когда есть реализации алго на асме.
http://wasm.ru/srclist.php
качайте cryptohash - там все есть. когда-то сама юзала реализации из этого сборника.
Хм, не понимаю, зачем что-то брать из пинча, когда есть реализации алго на асме.
эмм какбе там тож на асме, и 100% работает
Проблема не в том что вообще не работает а в том что не до конца...
Попробовал алго от ct757 и тож самое... Наверн я чего то не понимаю =\
Посмотрела сорец на васме. После преобразования в base64 у вас размер будет не 65535. После перекодирования. например после кодирования "Hello" мы получаем "SGVsbG8A". А вы сколько считываете из файла, такой и буфер выделяете
Не пойму о чем вы....
Я выделяю буффер, размером 65535, но ведь его хватает чтобы записать файл
размером например 50... в случае с hello все норм выполняется
А вы сколько считываете из файла, такой и буфер выделяете
Или я не понял или это вы невнимательно прочли, в приведенной функции надо
передать 3 аргумента - длину данных(сколько считали из файла) и 2 буффера.
Я так на код посмотрела, что вы читаете 65535 и столько же и выделяете в буфере, а этого, при размере файла >= 65535 может не хватить. Если же размер файла 50 байт, то все должно быть хорошо.
>>Прямо из ольки копирую буффер, перевожу и файлы не совпадают
то есть вы закодировали 50 байт из файла и решили проверить правильно ли закодировали, преобразовав обратно. Тогда такой вопрос. А где процедура Base64Decode? Encode вы привели.
вы закодировали 50 байт из файла и решили проверить правильно ли закодировали, преобразовав обратно
ну взял чутка больше ~700
Base64Decode - на пхп, также пробовал стороннюю утилиту, все равно получается
на выходе файл меньшего размера + неправильно декодируется 2 половина файла
PS а какой еще мб выход для передачи информации на сервер?
>> а какой еще мб выход для передачи информации на сервер?
Попробуйте хекс тогда, тут уже вообще полюбому проблем быть не должно.
>> неправильно декодируется 2 половина файла
скорее всего, трабла как раз при декодировании. Попробуйте Base64Encode/Decode в своей программе (в смысле все руками реализуйте), будет ли возникать такая ошибка. даже чисто ради интереса. Если скрипт/та "стороння утилита" раскодируют неверно, а у вас 2 процедуры кодирования/декодирования работают хорошо, то проблема уже не в вашем алгоритме.
>>Попробуйте хекс тогда, тут уже вообще полюбому проблем быть не должно.
а хекс 00 это не 0 чтоль? или ты имеешь ввиду в виде строки передавать?
проблема скорей всего в том что, при передачи закодированного бейс64 там присутвует "+" который заменяется на пробел, и поэтому происходит такая херня...
одно из решений на серваке в закодированном сообщение менять пробелы на +
чё-то мне в голову приходит замечательная идея преобразовать хекс в строку) типа был текст в хексе: 15 26 00 17 F4
на выходе получаем строчку "15260017F4". м?
помогите разобратся не могу скампелировать свою первую программу хелло ворлд
всегда выдает ошибку
http://imhost.ru/out.php/t20220_.jpg (http://imhost.ru/out.php/i20220_.jpg)
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
или сделай плз видео для начинаюющих именно с этой проблемой сталкиваются все начинающие ,например у меня виста я как-то загрузил масм32 с ней запарился показывала всегда ошибку писала типа место под регистер зарезервираванно и ошибка ,потом скачал фасм и так-же сделайте видео кто-нить по этой теме...
zeppe1in
21.02.2009, 23:54
Блин кто выложил видео "как зарегаца на античате"))
2 or1 Ты читаешь что я пишу или нет?????????????????
3) Если компилишь через гуишный Fasm то в FASMW.INI
нужно прописать путь до папки
типа
[Environment]
Include=D:\Coding\fasm\include
Вместо D:\Coding\fasm\include пропиши свой путь где у тебя это всё валяется.
ReScE11ER
10.03.2009, 17:58
у меня вопрос я новичок в программирование на асме так что подскажите как начать,какой софт нужен и статьи полезные?
я начинал с Александр Крупник САМОУЧИТЕЛЬ ASSEMBLER а по поводу софта или еще чего там все описанно. Хотя к мамсму по симпотичней билдер найти можно.
-m0rgan-
10.03.2009, 20:33
у меня вопрос я новичок в программирование на асме так что подскажите как начать,какой софт нужен и статьи полезные?
Софт: текстовый редактнр,пойдёт ASMEDIT
Компилятор, выбирай лябой, различие в синтаксисе минимальное,я юзаю masm.
из литературы:
А.Крупник
Изучаем ассемблер,статейки с wasm.ru, когда изучиш переходи на К.Касперски
искуство ассемблера и дизасемблирования...
Все знают значение в CMD сомманды tree. Вопрос - мона ли результат показа этой команды записать в блокнот, либо записать любой аналог (лиш бы все дерево папок диска было видно) ?
P.S. небуду засорять топики, поэтому сли есть подобное решение на C++ плз в ПМ ога)
tree C:\ >> file.txt
только с кодировкой надо поиграться)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot