Да, IDA Pro это мощь... Хм, а может кто напишет простую инструкцию по дизассму спековских прог (а то реально что-то не очень хочется вникать в эту кучу менюшек), ну что-то типа фаст гайда для чайников?
Вид для печати
Да, IDA Pro это мощь... Хм, а может кто напишет простую инструкцию по дизассму спековских прог (а то реально что-то не очень хочется вникать в эту кучу менюшек), ну что-то типа фаст гайда для чайников?
Оффтоп конечно уже, так как к теме асма никакого отношения не имеет...
Лично я отдизасмил 48ю игрушку одну довольно просто, имхо все весьма интуитивно - правой кнопкой мыши тыкаешь в текст - узнаешь горячие кнопки и вперед =) проблемы какие-то правда иногда возникают с двухбайтовыми переменными (у которых к любому байту обращение), а еще с адресами, к которым обращение идет - hl, adr: de, adr+1... ну и в идеале неплохо было бы с 128ми прогами научиться работать... Отдельная тема наверно нужна - ну и люди заинтересованные в этом....
Я по-началу был очень обрадован этим асмом, думал нашел то, что долго искал, но постепенно начали вылезать нехорошие моменты, что меня очень огорчает.Цитата:
Сообщение от Aprisobal
Баги в v1.07 RC4bf (build 02-12-2006).
1). Баг в отработке директивы "EXPORT" - не продвигается (?) входящий поток, поэтому компилятор ругается. В оригинальном компиляторе (2-х проходном) такого бага нет.
Пожелание: Было бы не плохо для "EXPORT" перечислять имена меток через запятую, а не прописывать для каждой метки директиву "export".
2). Баг с выводом hex-чисел для "EQU" (по опциям --sym, --exp), если число занимает все разряды (т.е. оно 32-х битное) и самый старший разряд начинается с A..F. Измени формат записи числа - ставь ведущим "#" или "0x" вместо концевого "h".
3). Тоже что-то там с входящим потоком, ругается на следующий код:
Оригинальный асм это компилит без проблем.Код:db 0,0,0,0,0,0,0,0,0,0,0
;
T0C83: db "Ё",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8
4). И еще одна ситуация. Не переваривает например такую запись байта:
Понятно, что для записи обратного слэша нужно юзать "\\", но правильней все же записывать как "\". Такая запись применяется во всех асмах (кроме этого). Это как-то криво, записывать ld a,"\\"Код:ld a,"\"
Вобщем ты увлекся второстепенными фитчами, а про сам асм забыл. Исправляй ситуацию.
Попробуй плз версию, которая приклеплена к сообщению. [...вышла.новая.версия...]
Ориентировка была не на спековские асмы(думаю ты их упомянул), а на современные стандарты. Также как и в C, C++, C#, PHP, Perl, JavaScript и пр. в двойных кавычках "" SjASMPlus (и оригинальный SjASM) обрабатывает управляющие последовательности типа \n, \t, \r... Просто в SjASMPlus сделал так, что в одинарных кавычках '' управляющие последовательности не действуют.Цитата:
Сообщение от Vasil
После недавнего общения с Alone Coder'ом составил следующий полезный LUA скрипт. Вставляю сюда, чтобы не пропало.
Код:LUA
-- Функция увеличивает на 1 число, записанное в файле fname и создает define с именем BUILD для, например, директивы DISPLAY
-- Пример использования функции см. ниже.
-- Внимание! Самостоятельно создайте пустой файл build.txt, иначе функция не будет работать
function increase_build(fname)
local fp
local build
fp = assert(io.open(fname, "rb"))
build = tonumber(fp:read("*all"))
assert(fp:close())
if type(build) == "nil" then
build = 0
end
build = build + 1;
sj.insert_define("BUILD", build)
fp = assert(io.open(fname, "wb"))
assert(fp:write( build ))
assert(fp:flush())
assert(fp:close())
end
increase_build("build.txt")
-- Создать define "TIME" с текущим временем
sj.insert_define("TIME", '"' .. os.date("%Y-%m-%d %H:%M:%S") .. '"')
ENDLUA
; отобразим время и номер сборки
DISPLAY "Build time: ", TIME
DISPLAY "Build number: ", /D, BUILD
1) "sub a,*" ассемблируется в две команды "sub a" и "sub *", что выбивается из ряда "add/adc/sbc a,*", совпадающих при ассемблировании с "add/adc/sbc *" (хотя формально все правильно, выглядит нелогично).
2) СЕРЬЕЗНЕЙШИЙ БАГ - директивы "ORG $-n" (и "ORG $+n") не влияют на бинарник, хотя в листинге отражаются правильно!! (хотел панимаиш встроить в макросы оптимизацию, а тут такой облом) :(
По справочнику всё ИМХО логично. Сам из оригинального асма это убрал.
Как понял ты пишешь про бинарник, который задается директивами OUTPUT (или который выдается в файле *.out). ORG не в режиме, устанавливаемом дир-ой DEVICE, работает почти как DISP/PHASE/TEXTAREA, т.е. просто задает виртуальный адрес, а все данные компилятор одним потоком сует в выходной файл.
Советую использовать директиву DEVICE и доступные после директивы SAVEBIN, SAVETRD, SAVESNA и т.д.
А если неохота привязываться к устройству? Вон на песюке же такой номер сразу же проходит, а там ведь сначала формируется obj... Имхо как должно быть: в out выводится участок от минимального из всех случившихся значений счетчика размещения до текущего (на момент END). Как вариант - до максимально случившегося значения.
Еще вопрос: LUA вообще нельзя в макрах использовать, или я че-то неправильно делаю? (пишет unexpected end of file)
Пока не смогу сделать твой вариант. Может быть FPOS поможет решить твою проблему? К сообщению приложил версию, в котором эта директива добавлена (в предыдущей версии была сделана, но не вставлена в обр-ик директив). [...вышла.новая.версия...]
Нельзя.
а можно сделать, чтоб после фразы
"Errors: 6072, warnings: 0, compiled: 2343 lines, work time: 20.293 seconds"
он ставил ентер? а то если делать echo в батнике, оно сразу за этой сторокой пишется..
спасибо:)
Гм... или я дурной или чего-то не понял, но почему у меня на строчке
сыпится Bytes Lost и привет родне ? :(Цитата:
TIMEOUT DB 5000
замени на dw?
=) улыбнуло! ведь модератор как никак =) без обид!!!
я конечно понимаю что без флейма нам никак :mad:
но просто если меч не вынимать из ножен, то он всё-таки заржавеет.
так что каким бы ты не был гуру - во всём нужна практика! что-то забывается , где -то упускается из виду , где-то просто описка, а тебе кажется что всё правильно... я лично вообще подумал что слово TIMEOUT забито в число системных, а оказалось всё гораздо проще... :sleep: я уж не говорю что быть модератором и хорошим кодером не одно и тоже :eek:
в версии 1.07 RC4bf не получается записать что-то по адресу #ffff.
включаю нужный девайс, делаю, например, ORG #FFFF:NOP, он при компиляции ругается (warning) и выходит как при ошибке.. можно это оперативно подправить? (может не проверять вообще, выходит ли $ за #ffff?)
и еще, можно расширить действие ALIGN? чтоб не заполнялось всё нулями, а просто менялся $? типа, если ALIGN 256, то не заполняется нулями, а если ALIGN 256,0, то заполняется..
2 дня трах.... (мучался) с конвертацией своего исходника из Шторма =( фих с ним, что команда EX HL,DE не существует - так нашел несовместимость:
.30 ld (hl),a:inc l
после компиляции выдает код
.30 ld (hl),a
inc l
имхо немного неадекватно - для подобных случаев есть конструкция dup/edup...
(но сколько я крови и пива на этом деле потратил....)
Баг:
Код
логично выдает ошибку, а вот код:Код:...
STRUCT
;дальше просто код
выкидывает компилятор нафигКод:...
STRUCT @
;...
Пожелание:
сделать опцию, согласно которой псевдоинструкция
ld rr1,rr2
будет собираться в
push rr2
pop rr1 (как сейчас для индексных регистров)
или в
ld rr1.l,rr2.l
ld rr1.h,rr2.h (длиннее и медленнее, зато без стека)
и чтоб в выходном листинге в комментах пихался развернутый вариант команды- ибо в руководстве почти ничего не сказано о подстановках...
Исправлено и расширено.
EX HL,DE добавил.
Ок, спс.
Подумаю.
Новая версия SjASMPlus 1.07 RC5. Исправлены некоторые баги и учтены несколько пожеланий. Качать с сайта: [...новая версия...]
Также не забывайте, что в исходники компилятора входит Makefile и соот-но его можно скомпилировать под Linux, FreeBSD и пр.
спасибо огромное!!! =)Цитата:
Сообщение от Aprisobal
странно, но у меня последняя версия совсем не запускается..
The application has failed to start because the application configuration is incorrect. Reinstalling the appl. may fix this problem...
:((
Новая версия SjASMPlus 1.07 RC5bf. Исправлен баг, связанный с утечкой памяти, применены патчи от Ric Hohne, добавлены в примеры исходники демо CosmoCubes от triebkraft. Качать с сайта: [...вышла новая версия...]
Что еще очччень хотелось бы видеть:
1) UNDEFINE для меток/переменных (удобно)
2) возможность опускать параметры при вызове макры, и связанные с этим конструкции IFB/IFNB (как в песюковом масме)
Записал в список TODO.
Напоминаю, что на сайте SjASMPlus есть страничка с проектами, где он был задействован - http://sjasmplus.sourceforge.net/pro...ing-sjasmplus/
Если вы использовали компилятор в своем проекте, то пишите - добавлю. Спасибо.
Возможно, уже было -- нет времени просто всю тему читать, -- есть ли для SjAsmPlus нормальный файл подсветки для Colorer?
Такс ;)
Решил я тут вплотную заняться дверями (Doors которые) и столкнулся с проблемой, точнее нашел один баг , полубаг и небольшой энхансмент ;)
1) при выполнении SAVEHOB, если имя файла меньше 8 символов расширение сохраняется нормальное, но если имя файла ровно 8 символов, то вместо указанного расширения встравляется I
2) при сохранении файла SAVETRD, если трехсимвольное расширение у файла (например "config.sys") то оно обрезается до одного символа :( я конечно понимаю что это стандарт, но всё-таки на спекртуме давно уже используется система трехсимвольных расширений и почему бы её не поддержать ? тем более что мне это необходимо для реализации системы.
3) Есть такая замечательная вещь как DirSys, было бы очень здорово заюзать это расширение TR-DOS, опять же необходимо для моей системы
заранее big snx!
Ну если отмотать в далёкий 1998 год ;) то уже в те далёкие времена Doors поддерживала работу с директориями ;) Я ещё не разбирался что из себя представляется DirSys, но директории в tr-dos моя давняя мечта ;)
2Aprisobal: Кстати на sourceforge вместо сорцов лежит архив с доками :( sjasmplus-docs-1.07-rc5bf2.zip
Вопросы это конечно хорошо ;) но я бы с радостью не отказался от готовых решений в виде либы: readFile, saveFile, deleteFile, createDir, removeDir :rolleyes:
Добавлено через 1 час 56 минут
Короче!
Понял, что следующего билда мы будем ждать оооочень долго :)
Скачал я сорцы sjasma (правда не самые последние)
Исправил баги и добавил фичи:
[+] если в SAVEHOB или SAVETRD 3х-символьное расширение, вместо адреса загрузки пишутся именно 2 оставшихся байта из расширения
[+] исправил ошибку если имя файла ровно 8 символов (вместо нормального расширения писалось "I")
[+] попутно исправил ошибку в SAVEHOB (при сохранении BASIC файлов, не верно указывался адрес, в результате чего терялся автозапуск BASIC-файлов, взял идею как было сделано в SAVETRD)
Пока автор тут не отпишется, выкладывать не стану, но если кому интересно могу замылить или выложить у себя на сайте. Я думаю Aprisobal это включит в следующий билд.
Не получается собрать SjASMPlus под Linux. Кто-нибудь может помочь?
люди, подскажите, кто знает, что надо сделать, чтобы sjasm после компиляции не сохранял .out файлы? (нахрен они вообще нужны, абсолютно бесполезная фича имхо). или чтобы сохранял их в определённую папку (сразу в recycled) ;)
батник напиши
я не батником компилю, а из редактора. батником неудобно.
Я из редактора запускаю батник.
А так-то sjasmplus поддерживает LUA-скрипты, можно ими наверное...
Во время компиляции не удастся удалить *.out файлы, т.к. они заняты SjASMPlus.
В следующей версии добавлю опцию, чтобы без директивы OUTPUT компилятор не создавал *.out файл.
огромное спасибо, апри! очень ждём.
вот бы сюда его прикрутить
реально удобная штука
http://www.radasm.com/
Собрал версию SjASM для AmigaOS3/Morphos
Взять можно тут: http://amirus.org.ru/files/sjasmplus_1.07rc5.lha
Гм o_O оказывается sjasmplus не знает инструкции INF:
странно, что дебаггер в Unreal показывет это какЦитата:
error: Unrecognized instruction: inf
STS 7.0 показывает как:Код:#ED #70 in (С)
кому верить ?Код:#ED #70 inf
или это опять извращения AlCo c аласмом ? да и сталкером заодно ?