Size: a a a

Ассемблер

2021 September 12

E

Entusiast in Ассемблер
А radare2 тут причём?
"Нажал «Закрыть», но не сохранил. Разработчики софт не умеют делать"
источник

s

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

[

[BRM]White Rabbit in Ассемблер
слушай, а у тебя же есть исходный код прекрасного компилятора
правь генерацию ассемблера на линуксовую
те по сути не надо, чтоб первый компилятор компилировался на линуксе
источник

[

[BRM]White Rabbit in Ассемблер
эту работу всё равно надо будет делать - даже если ты изменишь один бинарь, он всё равно будет генерировать винпроги
источник

p

piter in Ассемблер
вот буквально кусок кода:

To round a number up to the nearest power of two:
Intel $8B8D08000000. \ mov ecx,[ebp+8] \ the number
Intel $8B09. \ mov ecx,[ecx]
Intel $49. \ dec ecx
Intel $0FBDC9. \ bsr ecx,ecx
Intel $41. \ inc ecx
Intel $81F904000000. \ cmp ecx,4
Intel $0F8F05000000. \ jg over the next 1 statement
Intel $B904000000. \ mov ecx,4
Intel $8B8508000000. \ mov eax,[ebp+8] \ the number
Intel $C70001000000. \ mov [eax],1
Intel $D320. \ shl [eax],ecx  

\ - однострочный коммент, To - заголовок процедуры, a number означает что процедура работает над числом, Intel означает буквальную вставку машинного кода на это место, выражения оканчиваются точкой
источник

p

piter in Ассемблер
да, я думал поработать над этим, только дело в том что оно без промедлений  выдаёт исполняемый код. также пытался сделать чтоб оно выдавало ELF, но тоже застрял за недостатком скилла
источник

[

[BRM]White Rabbit in Ассемблер
честно говоря, выглядит так, будто легче написать си-код, который будет транслировать это в ассемблер и транслятор си-кода вот в это
в итоге мы траслируем си-код компилятора вот в это, а после компилируем сишкой
источник

s

s54816 in Ассемблер
Ох ты какая странная штука! Вот создания PE заголовков на английском я ещё никогда не видел! А чего ссылку-то не дал?
источник

[

[BRM]White Rabbit in Ассемблер
ну или можно взять не си, а что-то, что легче шебуршить
источник

E

Entusiast in Ассемблер
😳
источник

p

piter in Ассемблер
пытался изменить код на генерацию ассемблера, но там всё не так просто, как заменить, например Intel $49 на Intel $<хекс строка для "dec ecx">
источник

E

Entusiast in Ассемблер
"хекс строка"
источник

p

piter in Ассемблер
источник

p

piter in Ассемблер
я к тому что сделать так, чтоб вместо опкода 0x49 оно вставило соответствующий ему текст языка ассемблера "dec ecx"
источник

[

[BRM]White Rabbit in Ассемблер
О, там есть лексический BNF
источник

p

piter in Ассемблер
да ни черта. это просто какой-то корявый набросок, который ничего не даёт
источник

[

[BRM]White Rabbit in Ассемблер
ну, у языка же должна быть какая-то формальная спека
источник

p

piter in Ассемблер
да. радует что есть хоть такая
источник

p

piter in Ассемблер
я думал сделать компилятор на основе этого, но тоже сломался о неопытность
источник

P

ProMiNick in Ассемблер
что собой представляет любой PE (ну т.є. исполнимый файл для винды) - секции которые должны быть загружены в определенные адреса адресного пространства выполняемого процесса, притом вся совокупность секций может смещаться достаточно лишь корректно обработать секцию релоков если она есть. Далее как PE взаимодействует с внешним миром? у него есть таблица импортов - ЭТО и ЕСТЬ ИНТЕРФЕЙС ВЗАИМОДЕЙСТВИЯ С ВНЕШНИМ МИРОМ. САМОМУ ФОРМАТУ ГЛУБОКО ФИОЛЕТОВО ПОД КАКИМ ОКРУЖЕНИЕМ (ну т.е. Осью) ЕГО ЗАПУСТИЛИ, ГЛАВНОЕ ЧТОБ В ТАБЛИЦУ ИМПОРТОВ подали процедуры с тем же соглашением вызовов, тем же набором параметров, с условно идентичной функциональностью, если параметры колбеки то и в новом окружении они должны быть колбеками, т.е. окружение в нужный момент должно перебросить выполнение кода на эти колбеки, И ЕЩЕ МАЛОСТЬ СЕКЦИИ ДОЛЖНЫ БЫТЬ ВЗАИМНО РАСПОЛОЖЕНЫ В ПАМЯТИ ТАК КАК ЭТО БЫЛО ПРЕДУСМОТРЕНО, А СМЕЩАТЬСЯ ПО ПАМЯТИ МОГУТ В СООТВЕТСТВИИ С ОБРАБОТКОЙ СЕКЦИИ РЕЛОКОВ.
Поэтому PE для линукса это датафайл который ELF программа должна загрузить в срьственное адресное пространство в том числе с флагами на исполнение и подать на интерфейсы этого PE нужные функции.
А вот если в PE всякие TLS секции это добавит мучений.
ПОЭТОМУ PE нє надо портировать, ему надо писать лаунчер, а в помощь какие функции в импорте, что они делают, какие параметры - MSDN
источник