Да, 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 в батнике, оно сразу за этой сторокой пишется..
спасибо:)