![]() |
[ASSEMBLER] Задаем вопросы (для новичков)
надо в меседжбоксе вывести содержание переменной, как реализовать?
Great: В этой теме задаем простые вопросы по ассемблеру (специально для новичков) |
Элементарно:
Код:
... |
гг..ты немного...а точнее совсем нетак понял. Значение в переменную заносится во время работы проги, например я от функции получаю число. и его надо вывести на месседж бокс вот примерный код:
................... Код:
.dataКод:
code |
а сзади дописать 0h у messedg? так сказать привести строку к ASCIIZ виду
|
Просто так вывести нельзя. так число - это не строка.
Поэтому нужно перевести из числа в строку. Можно сделать это вручную, но лучше юзать API функцию. Вот код на FASM. Выводит содержимое регистра. Код:
format PE GUI |
Решил тоже ассемблер поизучать.
Пишется таким способом тяжело, зато инжектится в чужой процесс элементарно. IMНO зачем тогда ассемблер нужен. INVOKE wvsprintf,offset outst,offset inst,var1,var2, ..... h ttp://msdn2.microsoft.com/en-us/library/ms647551.aspx Преобразует содержание переменной(ых) в строку. Код:
.486 Особенно переменные в стеке. :confused: |
Мне нужна таблица системных вызовов линукс, чтобы с регистрами и все дела =\
Есть у кого? |
|
2 da_ff. Типа сумничал?
Можно и сделать деление, но это только в тех случаях когда пишешь под DOS. потому что там нет API функций. Если нужно под дос, то могу выложить примерчик! |
О! крута.... ну раз такой сабж забили, то посоветуйте книги/статьи попроще, ибо я ваще в этом не шарю
|
Цитата:
ЗЫ. Зубкова еще рекомендуют, сам не читал ) ЗЫЫ. Вообще, моё имхо, рано или поздно по любой книге можно выучить асм. Точнее, не по одной, а если купить несколько книг, мозг в конце концов научится отфильровывать ненужное. |
-n00by-
Iczelion tutorials все очень понятно написано имхо. |
Какраз Икзелиона туторы для начала будут сложные.
Лутше начинай с Калаша, потом Самоучитель Ассемблер IBM PC (Галисеева) ну и под конец Assembler для DOS, Win , Unix (Зубкова) Как по мне это три основные книжки, от Калаша узнаеш вообще что такое асм там всё очень доходчиво описано, Самоучитель - это уже следуйщий уровень, описана работа под Вынем и некоторые интересные алгоритмы, Зубков - это классика тут уже высший уровень. Линки не давал потому что у меня эти книжки в печатном варианте. Назвал основу но конечно чем больше инфы прочитаеш ( и запомниш! ) тем лутше для тебя (Тот же Икзелион). Так что гугл тебе в руки, сейчас литературы очень много! |
Берешь список инструкций МП и этого уже будет достаточно.
Ну и как всегда Справочник по Api функциям и прерываниям Dos |
To -n00by-:
Вот сюда зайди, тут много чего интересного есть. |
как компилировать *.asm сорцы в masm'e?
и во что они должны скомпилиться, в exe или в com? |
Во что компилить - это уже во что захочешь. т.е. есть опции для компиляции, также внутри файла есть маханькие описания. типа если файл создает из сегмента кода, данныйх итд, то никогда ты его не скомпилишь в ком файл.
Вроде масм компилит по умолчанию в EXE. Для того чтобы компильнуть под COM нужно делать так: ml.exe [имя_файла].asm /AT |
Цитата:
создаешь example.bat туды пишешь Код:
;@echo offЦитата:
на wasm.ru кажется были опции |
А не проще ли юзать какую-нибудь IDE? RadASM или WinASM, например?
|
Цитата:
ml /c /coff /Cp *.asm link /SUBSYSTEM:CONSOLE *.obj Флаги различны в зависимости от того, что на выходе хочешь. Навскидку что обозначают к сожалению уже не помню - смотри на wasm.ru Цитата:
Цитата:
|
Эх.. Fasm Rulit - нету мозгоебки с компилом
|
Цитата:
Цитата:
еще вопрос: в каком случае надо компилить в com, а в каком в exe? +еще один: зачем нужны файлы в расширении *.obj? Спасибо!=) |
После ассемблирования (с помощью ml) исходник превращается в промежуточную форму - объектный модуль (.obj). Для генерации exe'шника необходимо запустить компоновщик (link), указав ему объектный модуль.
|
Ну COM - это уже отжившее своё.
Такчто в любом случае лучше компилить EXE Хотя у комов размер меньше. Вообще у ассемблеров не очень большое различие. Вот я с легкостью перешел с TASM на FASM и при этом я понял, что с FASM'a надо было начинать с самого начала. Потому что на нем можно тварить чудеса. // Анекдот в тему: Решил хакер блины печь, первый блин как всегда вышел Комом, а второй уже EXE'шником |
Цитата:
я тоже хотел начать с fasm'a, но не нашел подходящей литературы, поэтому пришлось поучить masm. 2 slesh, в чем основные различия tasm/masm и fasm? (наиболее интересен синтаксис) |
FASM рулит в том что не надо мучаться с компилом.
Все параметры компила пишутся в исходнике проги. Вот к примеру некоторые из них: 1) format PE GUI at 5000000h - компилит в PE EXE под графическую оболочку и базовый адрес кода - 5000000h 2) format PE - тоже PE EXE но под консоль 3) format PE64 - под 64 битные системы 4) use16 - 16-ти битный bin файла 5) use32 - 32-х битный bin файла 6) format ELF - вообще под линух. Ну и в томже духе. И вообще в FASM можно ресурсы прописывать внутри кода программы. |
2 slesh
1. если указать в исходнике format PE или format PE GUI at 5000000h, то строчкой ниже надо писать use16 или use32? 2. почему com весит 25 байт, а ехе 1 кб, причем при запуске ехе вылезает ошибка. вот сам код: Код:
format PE ; com компилился с format binary |
2Piflit:
1. Формат PE подразумевает 32 битную адресацию. 2. com - программа на диске находится в таком же состоянии как и в памяти, а в exe присутствует ещё туча всякой служебной инфы, PE заголовок, стаб и т.д. И ещё, какие нафик прерывания, если ты пишешь под винду? =) Или тогда уже пиши под дос. |
Цитата:
|
нафиг дос))) буду писать под винду, просто сорц из книжки был именно такой...
чувствую, придется еще одну покупать, типа "асм под вин32"... |
Цитата:
Под винду можешь глянуть Уроки Iczelion'а (http://wasm.ru/publist.php?list=1), правда там под масм, но суть та же. |
Цитата:
килограммы мануалов и wasm.ru мне в помощь)) кстати, я оттуда (wasm.ru) почти дочитал цикл статей про Ollydbg. познавательно)) ЗЫ но ведь дос приложения можно запускать под вин?... через командную строчку... и тогда их соответственно надо компилить в com, как в моем исходнике... я прав?) |
Цитата:
|
Цитата:
|
RTFM _http://flatassembler.net/docs.php
|
как открыть com программу в CodeView?
у меня открываются только exe |
Без понимания ассемблера в дос, ты будешь виндовс чайником.
|
нужно обьединить два исходника на masm, но когда я включаю модули из второй в первую, вылезают ошибки в модуле windows.inc, огромная куча, вида:
syntax error: in structure structure improperly initialized symbol type conflict: bool symbol redefenition: hinst если его закомментить то ошибки исчезают и в user32.inc ошибка symbol redefinition : wsprintfA т.е. как я понял какие-то структуры из windows.inc как-то перекрываются со структурами из других модулей? как это можно решить, можно ли вторую программу как-нибудь отдельным модулем c подпрограммой сделать, а из первой её вызывать? Код:
;модули первой программы |
Цитата:
Это ошибка в масме, wsprintfA объявлена и в user32.inc (где и должна быть) и в windows.inc (где ее за каким-то хреном поместили). |
выдрал фтп сервер из пинча
вроде бы компилиться ml /c /coff /Cp ftp.asm потом линкую link /subsystem:windows ftp.obj вылезают ошибки unresolved external symbol _SendReply@8 unresolved external symbol _MainSockListen@0 unresolved external symbol _ServeThread@4 в файле obj к функциям SendReply, MainSockListen, ServeThread добавляются какие-то цифры и нижняя черточка перед _функция@8 _функция@0 _функция@4 и линкер не может понять их что это? у каво есть рабочий исходник ftp сервера? ниже то что добавил в файл ftp.asm Код:
.586P |
| Время: 00:29 |