Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Ivan хвалится достижениями, но не показывает исходники

Сообщений 61 страница 90 из 161

61

Ivan написал(а):

зачем тогда спрашивали если и не программируете?

Размышлял с точки зрения пользователя. Что не удобно было сравнивать дамп. Теперь все ок, за исключением недоступности технологии. Есть более доступная и за счёт этого более конкурентоспособная западная технология.

0

62

Лис написал(а):

Есть более доступная и за счёт этого более конкурентоспособная западная технология.

Хорошо. Пользуйтесь ею, зачем собрались?

0

63

Ждём, пока кто-нибудь сделает технологию сравнимой доступности. Но это не Ivan, потому что он не выкладывает исходные тексты (неважно по какой причине, из лени, из коммерческой жилки).

0

64

Лис написал(а):

Ждём, пока кто-нибудь сделает технологию сравнимой доступности.

Думаю мне тоже надо сесть на этой остановке, и тоже посидеть подождать когда кто-нибудь приедет.
Будем ждать вместе?

0

65

Ivan написал(а):

Думаю мне тоже надо сесть на этой остановке, и тоже посидеть подождать

Это ваше дело. Сейчас придёт БудДен и скажет, что я расхолаживаю энтузиастов.

Между прочим, я раньше писал, что и коммерческие направления этому форуму не чужды. Но это вы не обсуждаете.
Я прям в догадках теряюсь, что же вам нужно-то?

Отредактировано Лис (2024-09-12 21:16:14)

0

66

Лис написал(а):

Между прочим, я раньше писал, что и коммерческие направления этому форуму не чужды. Но это вы не обсуждаете.

Зачем что-то обсуждать если еще ничего (условно) нет.

Лис написал(а):

Я прям в догадках теряюсь, что же вам нужно-то?

Все также, меня интересует практическая реализация раскрутки ассемблера.

0

67

Ivan написал(а):

Зачем что-то обсуждать

что-то - это принципы, цели и планы.
зачем - для совместной деятельности.

весь сайт как-бы об этом.

если что-то не делаю я, то может быть будет делать кто-то другой.

Отредактировано Лис (2024-09-12 21:15:48)

0

68

Лис написал(а):

зачем - для совместной деятельности.

А что вы хотите делать?

0

69

Ivan написал(а):

А что вы хотите делать?

Само планирование и выписывание целей является деятельностью. мы это с БудДеном выяснили.
Что Лис всё-таки деятельность ведёт, а не просто "ничего не делает".

0

70

Лис написал(а):

Само планирование и выписывание целей является деятельностью. мы это с БудДеном выяснили.
Что Лис всё-таки деятельность ведёт, а не просто "ничего не делает".

У меня свои цели и планы, я полагаюсь на них.

0

71

Ivan написал(а):

У меня свои цели и планы, я полагаюсь на них.

Ну вот у меня тоже. Я их даже иногда публикую, правда последние несколько лет обленился.

0

72

Лис написал(а):

Ну вот у меня тоже. Я их даже иногда публикую, правда последние несколько лет обленился

Как плохо что вы не программируете, а то можно было что-то вместе сделать, а так -  нет.

0

73

Ivan написал(а):

можно было что-то вместе сделать, а так -  нет.

Хорошо, тогда я вас из планов вычёркиваю. Впрочем ещё и вписать не успел.

0

74

Лис написал(а):

Хорошо, тогда я вас из планов вычёркиваю. Впрочем ещё и вписать не успел.

Хорошо. На том и порешили.

0

75

А вы случайно не тот самый Иван Горчаков, разработчик языка программирования GAZ?

Ivan написал(а):

Как плохо что вы не программируете, а то можно было что-то вместе сделать, а так -  нет.

Совместная работа над программным проектом (даже совсем небольшим, состоящим из одного исходного файла) в 2024 году предполагает обязательное использование системы управления версиями (например, Git). Вы же её используете?
И я согласен с Лисом в том, что исходный код имеет смысл открыть, иначе желающих подключиться к вашему проекту для совместной работы попросту не будет.

Но ладно, это дело ваше [открывать код или нет].

А я хочу предложить вам поучаствовать в смежном проекте — составлении русскоязычной документации по архитектуре x86-64 с точки зрения машинных команд защищённого режима.
Т.к. вы в эту тему (кодирование инструкций x86) погрузились недавно и воспоминания у вас пока ещё свежие (допрашивать разработчиков какого-либо завершённого ассемблера, например Томаша Грыштара (создателя fasm) смысла мало — им это уже не интересно и подробностей от них не добиться).
Меня интересуют детали того, как именно кодируются инструкции, с самого начала. Например, почему mov al, bl кодируется как 8A C3? Отсюда можно понять, что 8A — это опкод, а C3 как получилось? Судя по всему, это ModR/M-байт. Но где про это подробно написано, какую документацию вы используете?
Если постараться, то найти такую информацию и собрать по крупицам, конечно, можно. Но на это лично у меня времени нет. И хотелось бы сэкономить время, не только моё, но и других потенциальных разработчиков русского ассемблера.

P.S. И насчёт обозначения шестнадцатеричных цифр кириллицей. Почему вам не понравился вариант Юрия «abcdef» -> «абцдеф»? (Можно ещё рассмотреть «абсдеф».) Просто из-за того, что в «абвгде» и «abcdef» буква «е» обозначает различные цифры, может возникнуть путаница в процессе коммуникации — опкод 8Е может быть неверно истолкован как 8F. А на данном этапе полностью отказаться от латинских букв всё равно не получится.

0

76

alextretyak написал(а):

А вы случайно не тот самый Иван Горчаков, разработчик языка программирования GAZ?

Нет, я другой "Иван" :)

alextretyak написал(а):

Совместная работа над программным проектом (даже совсем небольшим, состоящим из одного исходного файла) в 2024 году предполагает обязательное использование системы управления версиями (например, Git). Вы же её используете?

Использую https://github.com/tigertv/bk0010-01

alextretyak написал(а):

И я согласен с Лисом в том, что исходный код имеет смысл открыть, иначе желающих подключиться к вашему проекту для совместной работы попросту не будет.

Пока не вижу в этом необходимости, у меня много проектов на гитхабе, но даже с исходными кодами не особо много людей подлючилось. В первую очередь нужно чтобы подлючились пользователи.

alextretyak написал(а):

Но ладно, это дело ваше [открывать код или нет].

В том то и дело что мое, но почему то тут кто-то настаивает открыть исходники, при этом не хотя заляпаться своими лапками в коде. 

alextretyak написал(а):

А я хочу предложить вам поучаствовать в смежном проекте — составлении русскоязычной документации по архитектуре x86-64 с точки зрения машинных команд защищённого режима.

Спасибо, за предложение, но пока занят этим проектом.

alextretyak написал(а):

Меня интересуют детали того, как именно кодируются инструкции, с самого начала. Например, почему mov al, bl кодируется как 8A C3? Отсюда можно понять, что 8A — это опкод, а C3 как получилось? Судя по всему, это ModR/M-байт. Но где про это подробно написано, какую документацию вы используете?
Если постараться, то найти такую информацию и собрать по крупицам, конечно, можно. Но на это лично у меня времени нет. И хотелось бы сэкономить время, не только моё, но и других потенциальных разработчиков русского ассемблера.

Так в это же общедоступная информация, вот к примеру https://i.sstatic.net/VTxd0.jpg

alextretyak написал(а):

P.S. И насчёт обозначения шестнадцатеричных цифр кириллицей. Почему вам не понравился вариант Юрия «abcdef» -> «абцдеф»?

Траслитерация. Не особо что-то меняется, да и проще кодировать - не нужно вводить дополнительную строку для кодирования. Хотя я в принципе не цепляюсь к синтаксису и все обсуждаемо.

alextretyak написал(а):

А на данном этапе полностью отказаться от латинских букв всё равно не получится.

Можно попробывать. Мне это интересно с точки зрения экзотики, посмотреть по новому на привычные вещи.

0

77

Ivan написал(а):

Спасибо, за предложение, но пока занят этим проектом.

Так в том то и дело, что заниматься такой документацией нужно не вместо вашего проекта, а параллельно!
Т.е. я ни в коем случае не предлагаю вам забрасывать ваш проект, наоборот.
Работа по генерации машинного кода из языка ассемблера включает в себя получение большого количества специфических знаний и документация нужна, чтобы эти знания не потерялись.
Вот есть у нас готовые ассемблеры, даже исходники есть (fasm, nasm). Ну и что толку? Разобраться в них стороннему человеку очень трудно. Проще написать с нуля свою реализацию генерации маш. кода на основе информации из Интернета и официальной документации Intel.

Ivan написал(а):

Так в это же общедоступная информация, вот к примеру https://i.sstatic.net/VTxd0.jpg

Хе. Ясно, что общедоступная. Проблема в том, что этой "общедоступной информации" слишком много! (И большая её часть нерелевантна искомому запросу.)
Нет, если всё бросить и заниматься одной только этой проблемой (генерации маш. кода x86), то может оно и нормально, но я ищу более лёгкий путь.

Вот дали вы ссылку на эту картинку.
Ну да, картинка красивая, и что? Как с её помощью мне получить машинный код инструкции lea edx, [eax + ebx*2]?
А lea edx, [eax + ebx*2 + 8]?
А lea edx, [ebx*2 + 8]?
А lea edx, [ebx*2]?
А lea rdx, [ebx*2]?
А lea rdx, [rbx*2]?
И т.д. и т.п. (но последние три особенно интересны).

Узнать опкод нужной инструкции — это элементарно. Для этого красивая таблица не нужна. А вот понимание нюансов, принципы формирования режимов адресации — вот что нужно.

0

78

alextretyak написал(а):

Так в том то и дело, что заниматься такой документацией нужно не вместо вашего проекта, а параллельно!
Т.е. я ни в коем случае не предлагаю вам забрасывать ваш проект, наоборот.

Дополнительные накладные расходы, есть много информации по кодам, это не так как было доинтернетовскую эпоху когда чтобы получить какую-то информацию, нужно ходить в библиотеку и выписывать журналы.

alextretyak написал(а):

Работа по генерации машинного кода из языка ассемблера включает в себя получение большого количества специфических знаний и документация нужна, чтобы эти знания не потерялись.

Возможно, но они уже не становятся специфичными если уже это проходил когда-то.

alextretyak написал(а):

Хе. Ясно, что общедоступная. Проблема в том, что этой "общедоступной информации" слишком много! (И большая её часть нерелевантна искомому запросу.)

Информации много, и надо уметь ее находить.

alextretyak написал(а):

Ну да, картинка красивая, и что? Как с её помощью мне получить машинный код инструкции lea edx, [eax + ebx*2]?

Там внизу описание опкода есть, там SIB байт есть.
Простой способ берешь компилятор ассемблера и компилируешь и получаешь маш.код, конечно компилятор ассемблера из 2 вариантов представления выбирает один, но это нюансы.

alextretyak написал(а):

Узнать опкод нужной инструкции — это элементарно. Для этого красивая таблица не нужна. А вот понимание нюансов, принципы формирования режимов адресации — вот что нужно.

Такое ощущение что вы и так все знаете :)

PS. Вот еще информация к примеру https://www.felixcloutier.com/x86/pop

Отредактировано Ivan (2024-09-14 19:04:57)

0

79

Метки для строк формируются автоматически, заглавные буквы заменены в ключевых словах:
Код input.ruc:

Код:
ФункцияДлиныСтроки {асм("
	; [РФ + 0ш10] - указатель на строку
	; --------------------------------

	Копировать РЧ, 0
	Копировать РИ, [РФ + 0ш10]
	Уменьшить1 РИ
	Уменьшить1 РЧ
ЦИКЛ2:
	Увеличить1 РИ
	Увеличить1 РЧ
	Копировать РА, [РИ]
	БитИ РА, 0шЕЕ
	ПерейтиЕслиНе0В ЦИКЛ2
	Копировать РА, РЧ
")}

ФункцияВывода {асм("
	; [РФ + 0ш10] - указатель на строку
	; --------------------------------

	; считаем длину строки
	Втолкнуть [РФ + 0ш10]                 
	Вызвать ФункцияДлиныСтроки
	Увеличить РС, 0ш08
	Копировать РД, РА  ; длина строки

	Копировать РА, 1              ; системная команда 'запись файла'
	Копировать РН, РА             ; 1 - консоль
	Копировать РИ, [РФ + 0ш10]    ; указатель на строку
	ВызватьСистему
")}

ФункцияВыводаЧисла {асм("
	; [РФ + 0ш10] - число
	; --------------------------------
	Втолкнуть РД
	Втолкнуть РБ
	Втолкнуть РА

	Уменьшить РС, 0ш40
	; [РФ - 0ш08] - переменная

	Копировать РД, [РФ + 0ш10]
	Копировать РЧ, 1
	Копировать РБ, 0ш0а

Цикл:
	; берем 16-ричную цифру из РД
	Копировать РА, РД
	БитИ РА, 0шЕ
	БитИли РА, 0ш30
	СдвинутьВлево РБ, 8
	БитИли РБ, РА
	Увеличить1 РЧ

	СдвинутьВправо РД, 4
	ПерейтиЕслиНе0В Цикл

	; новая строка

	Втолкнуть РБ

	Копировать РД, РЧ      ; длина строки
	Копировать РИ, РС      ; указатель на строку
	Копировать РА, 1       ; системная команда 'запись файла'
	Копировать РН, РА      ; 1 - консоль
	ВызватьСистему

	Вытолкнуть РБ


	Вытолкнуть РА
	Вытолкнуть РБ
	Вытолкнуть РД
")}

Начало {
	ФункцияВыводаЧисла(0ш953)
	ФункцияВывода("Привет")
	ФункцияВывода("Ура")
	ФункцияВывода("Победа")
	ФункцияВывода("Теперь можно вводить произольную строку, метка формируется автоматически.")
}

ассемблер:

Код:
.Байт 0ш7Е, 0ш45, 0ш4В, 0ш46                           ; 0x00 : e_ident[EI_MAG0], magic 0x7f, ELF
.Байт 0ш02                                             ; 0x04 : e_ident[EI_CLASS], 1 - 32 bit, 2 - 64 bit
.Байт 0ш01                                             ; 0x05 : EI_DATA, endianess, 1 - little, 2 - big
.Байт 0ш01                                             ; 0x06 : EI_VERSION, for ELF = 1
.Байт 0ш00                                             ; 0x07 : EI_OSABI, OS system ABI, 0 = System V
.Байт 0ш00                                             ; 0x08 : EI_ABIVERSION, 
.Байт 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00         ; 0x09 : EI_PAD reserved, zeros
.Байт 0ш02, 0ш00                                       ; 0x10 : e_type, object file type: 0 - unknown, 1 - reloc, 2 - exec, 3 - shared, 4 - core, etc.
.Байт 0ш3Д, 0ш00                                       ; 0x12 : e_machine, 0x32 - IA-64, 0x3e - AMD x86-64
.Байт 0ш01, 0ш00, 0ш00, 0ш00                           ; 0x14 : e_version
.Байт 0ш78, 0ш00, 0ш01, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x18 : e_entry, entry point, 32bit - 4bytes, 64bit - 8bytes
.Байт 0ш40, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x20 : e_phoff, program header table
.Байт 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x28 : e_shoff, section header table
.Байт 0ш00, 0ш00, 0ш00, 0ш00                           ; 0x30 : e_flags
.Байт 0ш40, 0ш00                                       ; 0x34 : e_ehsize, size of the header, normally 64bytes for 64bit, 54bytes for 32bit
.Байт 0ш38, 0ш00                                       ; 0x36 : e_phentsize, size of a program header table entry. 0x20 - 32bit, 0x38 - 64bit
.Байт 0ш01, 0ш00                                       ; 0x38 : e_phnum, number of entries in the program header table
.Байт 0ш00, 0ш00                                       ; 0x3a : e_shentsize, size of a section header table entry, 0x40(64b), 0x28(32b
.Байт 0ш00, 0ш00                                       ; 0x3c : e_shnum, number of entries in the section header table
.Байт 0ш00, 0ш00                                       ; 0x3e : e_shstrndx, index of the section header table entry that contains the section names

; 0x40 - end of ELF header size

; 0x40 - The Program header table
.Байт 0ш01, 0ш00, 0ш00, 0ш00                           ; 0x40 : p_type, type of a segment, 1 - PT_LOAD
.Байт 0ш05, 0ш00, 0ш00, 0ш00                           ; 0x44 : p_flags, segment dependent flags, only 64bit (RWX)
.Байт 0ш78, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x48 : p_offset, offset of the segment in the file image
.Байт 0ш78, 0ш00, 0ш01, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x50 : p_vaddr, virtual address of the segment
.Байт 0ш78, 0ш00, 0ш01, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x58 : p_paddr, the same
.Байт 0ш38, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x60 : p_filesz, size of the segment in the file image 
.Байт 0ш38, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x68 : p_memsz, size of the segment in the memory
.Байт 0ш10, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00   ; 0x70 : p_align, 0 and 1 - no alignment, power of 2 
; 0x78 - End of the Program header table

 ; 00010078: entry_point

ПерейтиВ Начало
М0: .Байт 0шг0, 0ш9е, 0шг1, 0ш80, 0шг0, 0шб8, 0шг0, 0шб2, 0шг0, 0шб5, 0шг1, 0ш82, 0ш0а, 0
М1: .Байт 0шг0, 0ша3, 0шг1, 0ш80, 0шг0, 0шб0, 0ш0а, 0
М2: .Байт 0шг0, 0ш9е, 0шг0, 0шбд, 0шг0, 0шб1, 0шг0, 0шб5, 0шг0, 0шб4, 0шг0, 0шб0, 0ш0а, 0
М3: .Байт 0шг0, 0ша2, 0шг0, 0шб5, 0шг0, 0шбе, 0шг0, 0шб5, 0шг1, 0ш80, 0шг1, 0ш8в, 0ш20, 0шг0, 0шбв, 0шг0, 0шбд, 0шг0, 0шб6, 0шг0, 0шбг, 0шг0, 0шбд, 0ш20, 0шг0, 0шб2, 0шг0, 0шб2, 0шг0, 0шбд, 0шг0, 0шб4, 0шг0, 0шб8, 0шг1, 0ш82, 0шг1, 0ш8в, 0ш20, 0шг0, 0шбе, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шб8, 0шг0, 0шб7, 0шг0, 0шбд, 0шг0, 0шбб, 0шг1, 0ш8в, 0шг0, 0шбг, 0шг1, 0ш83, 0шг1, 0ш8д, 0ш20, 0шг1, 0ш81, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг1, 0ш83, 0ш2в, 0ш20, 0шг0, 0шбв, 0шг0, 0шб5, 0шг1, 0ш82, 0шг0, 0шба, 0шг0, 0шб0, 0ш20, 0шг1, 0ш84, 0шг0, 0шбд, 0шг1, 0ш80, 0шг0, 0шбв, 0шг0, 0шб8, 0шг1, 0ш80, 0шг1, 0ш83, 0шг0, 0шб5, 0шг1, 0ш82, 0шг1, 0ш81, 0шг1, 0ш8е, 0ш20, 0шг0, 0шб0, 0шг0, 0шб2, 0шг1, 0ш82, 0шг0, 0шбд, 0шг0, 0шбв, 0шг0, 0шб0, 0шг1, 0ш82, 0шг0, 0шб8, 0шг1, 0ш87, 0шг0, 0шб5, 0шг1, 0ш81, 0шг0, 0шба, 0шг0, 0шб8, 0ш2д, 0ш0а, 0
; -------------------------------------------------------------------------------------
    ФункцияДлиныСтроки:
; -------------------------------------------------------------------------------------
	; пролог
	Втолкнуть РФ
	Копировать РФ, РС

	; [РФ + 0ш10] - указатель на строку
	; --------------------------------

	Копировать РЧ, 0
	Копировать РИ, [РФ + 0ш10]
	Уменьшить1 РИ
	Уменьшить1 РЧ
ЦИКЛ2:
	Увеличить1 РИ
	Увеличить1 РЧ
	Копировать РА, [РИ]
	БитИ РА, 0шЕЕ
	ПерейтиЕслиНе0В ЦИКЛ2
	Копировать РА, РЧ

	; эпилог
	Копировать РС,  РФ
	Вытолкнуть РФ
	Назад

; -------------------------------------------------------------------------------------
    ФункцияВывода:
; -------------------------------------------------------------------------------------
	; пролог
	Втолкнуть РФ
	Копировать РФ, РС

	; [РФ + 0ш10] - указатель на строку
	; --------------------------------

	; считаем длину строки
	Втолкнуть [РФ + 0ш10]                 
	Вызвать ФункцияДлиныСтроки
	Увеличить РС, 0ш08
	Копировать РД, РА  ; длина строки

	Копировать РА, 1              ; системная команда 'запись файла'
	Копировать РН, РА             ; 1 - консоль
	Копировать РИ, [РФ + 0ш10]    ; указатель на строку
	ВызватьСистему

	; эпилог
	Копировать РС,  РФ
	Вытолкнуть РФ
	Назад

; -------------------------------------------------------------------------------------
    ФункцияВыводаЧисла:
; -------------------------------------------------------------------------------------
	; пролог
	Втолкнуть РФ
	Копировать РФ, РС

	; [РФ + 0ш10] - число
	; --------------------------------
	Втолкнуть РД
	Втолкнуть РБ
	Втолкнуть РА

	Уменьшить РС, 0ш40
	; [РФ - 0ш08] - переменная

	Копировать РД, [РФ + 0ш10]
	Копировать РЧ, 1
	Копировать РБ, 0ш0а

Цикл:
	; берем 16-ричную цифру из РД
	Копировать РА, РД
	БитИ РА, 0шЕ
	БитИли РА, 0ш30
	СдвинутьВлево РБ, 8
	БитИли РБ, РА
	Увеличить1 РЧ

	СдвинутьВправо РД, 4
	ПерейтиЕслиНе0В Цикл

	; новая строка

	Втолкнуть РБ

	Копировать РД, РЧ      ; длина строки
	Копировать РИ, РС      ; указатель на строку
	Копировать РА, 1       ; системная команда 'запись файла'
	Копировать РН, РА      ; 1 - консоль
	ВызватьСистему

	Вытолкнуть РБ


	Вытолкнуть РА
	Вытолкнуть РБ
	Вытолкнуть РД

	; эпилог
	Копировать РС,  РФ
	Вытолкнуть РФ
	Назад

; -------------------------------------------------------------------------------------
    Начало:
; -------------------------------------------------------------------------------------
	Втолкнуть 2387
	Вызвать ФункцияВыводаЧисла
	Увеличить РС, 0ш8
	Втолкнуть М0
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8
	Втолкнуть М1
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8
	Втолкнуть М2
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8
	Втолкнуть М3
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8
	; выход
	Копировать РА, 0ш3В           ;  системная команда - 'выход'
	БитИсключающееИли РН, РН    ;  результат программы
	ВызватьСистему

бинарник:

Код:
./rex ./output.bin
00000000: 7е 45 4в 46 02 01 01 00 00 00 00 00 00 00 00 00  |.ELF............|
00000010: 02 00 3д 00 01 00 00 00 78 00 01 00 00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |@...............|
00000030: 00 00 00 00 40 00 38 00 01 00 00 00 00 00 00 00  |....@.8.........|
00000040: 01 00 00 00 05 00 00 00 78 00 00 00 00 00 00 00  |........x.......|
00000050: 78 00 01 00 00 00 00 00 78 00 01 00 00 00 00 00  |x.......x.......|
00000060: 38 00 00 00 00 00 00 00 38 00 00 00 00 00 00 00  |8.......8.......|
00000070: 10 00 00 00 00 00 00 00 д9 6д 01 00 00 г0 9е г1  |.........n......|
00000080: 80 г0 б8 г0 б2 г0 б5 г1 82 0а 00 г0 а3 г1 80 г0  |................|
00000090: б0 0а 00 г0 9е г0 бд г0 б1 г0 б5 г0 б4 г0 б0 0а  |................|
000000а0: 00 г0 а2 г0 б5 г0 бе г0 б5 г1 80 г1 8в 20 г0 бв  |............. ..|
000000б0: г0 бд г0 б6 г0 бг г0 бд 20 г0 б2 г0 б2 г0 бд г0  |........ .......|
000000в0: б4 г0 б8 г1 82 г1 8в 20 г0 бе г1 80 г0 бд г0 б8  |....... ........|
000000г0: г0 б7 г0 бд г0 бб г1 8в г0 бг г1 83 г1 8д 20 г1  |.............. .|
000000д0: 81 г1 82 г1 80 г0 бд г0 ба г1 83 2в 20 г0 бв г0  |..........., ...|
000000е0: б5 г1 82 г0 ба г0 б0 20 г1 84 г0 бд г1 80 г0 бв  |....... ........|
00000100: г0 б8 г1 80 г1 83 г0 б5 г1 82 г1 81 г1 8е 20 г0  |.............. .|
00000110: б0 г0 б2 г1 82 г0 бд г0 бв г0 б0 г1 82 г0 б8 г1  |................|
00000120: 87 г0 б5 г1 81 г0 ба г0 б8 2д 0а 00 55 48 89 д5  |............UH..|
00000130: 48 в7 в1 00 00 00 00 48 8б 75 10 48 ее вд 48 ее  |H......H.u.H..H.|
00000140: в9 48 ее в6 48 ее в1 48 8б 06 48 81 д0 ее 00 00  |.H..H..H..H.....|
00000150: 00 0е 85 да ее ее ее 48 89 в8 48 89 дв 5г в3 55  |.......H..H..].U|
00000160: 48 89 д5 ее 75 10 д8 в1 ее ее ее 48 81 в4 08 00  |H...u......H....|
00000170: 00 00 48 89 в2 48 в7 в0 01 00 00 00 48 89 в7 48  |..H..H......H..H|
00000180: 8б 75 10 0е 05 48 89 дв 5г в3 55 48 89 д5 52 53  |.u...H..].UH..RS|
00000190: 50 48 81 дв 40 00 00 00 48 8б 55 10 48 в7 в1 01  |PH..@...H.U.H...|
000001а0: 00 00 00 48 в7 в3 0а 00 00 00 48 89 г0 48 81 д0  |...H......H..H..|
000001б0: 0е 00 00 00 48 81 в8 30 00 00 00 48 в1 д3 08 48  |....H..0...H...H|
000001в0: 09 в3 48 ее в1 48 в1 да 04 0е 85 гб ее ее ее 53  |..H..H.........S|
000001г0: 48 89 ва 48 89 д6 48 в7 в0 01 00 00 00 48 89 в7  |H..H..H......H..|
000001д0: 0е 05 5б 58 5б 5а 48 89 дв 5г в3 68 53 09 00 00  |..[X[ZH..].hS...|
000001е0: д8 95 ее ее ее 48 81 в4 08 00 00 00 68 7г 00 01  |.....H......h}..|
00000200: 00 д8 59 ее ее ее 48 81 в4 08 00 00 00 68 8б 00  |..Y...H......h..|
00000210: 01 00 д8 48 ее ее ее 48 81 в4 08 00 00 00 68 93  |...H...H......h.|
00000220: 00 01 00 д8 37 ее ее ее 48 81 в4 08 00 00 00 68  |....7...H......h|
00000230: а1 00 01 00 д8 26 ее ее ее 48 81 в4 08 00 00 00  |.....&...H......|
00000240: 48 в7 в0 3в 00 00 00 48 31 ее 0е 05              |H..<...H1...|

Вывод бинарника:

953
Привет
Ура
Победа
Теперь можно вводить произольную строку, метка формируется автоматически.

Отредактировано Ivan (2024-09-15 12:55:51)

0

80

Ivan написал(а):

конечно компилятор ассемблера из 2 вариантов представления выбирает один, но это нюансы.

Можете уточнить, что это за 2 варианта представления?

0

81

alextretyak написал(а):

Можете уточнить, что это за 2 варианта представления?

Я не так сильно много лазил в машинном коде, но такую штуку я знаю:

Код:
    1018:	89 c1                	mov    %eax,%ecx
    101a:	8b c8                	mov    %eax,%ecx

Cмотрите на биты:
1000 1001 11 000 001
1000 1011 11 001 000

Отредактировано Ivan (2024-09-17 10:29:15)

0

82

В коде команды (первом байте) есть "бит направления пересылки".
А в байте mod R/M кодируются два регистра - откуда и куда, или куда и откуда.
А в текстовой записи порядок операндов только один (для конкретного синтаксиса).

Судя по приведённому примеру - это бит, следующий за младшим (т.е. второй, с индексом 1 если считать с нуля)

Cмотрите на биты:
10001001 11000001
10001011 11001000

Отредактировано Лис (2024-09-17 10:46:12)

0

83

Лис написал(а):

только один (для конкретного синтаксиса).

Cкорее для конкретного компилятора(транслятора).
Т.е. если есть какой-то машинный код без какой-то служебной информации(заголовков elf и т.д) по нему можно идентифицировать тип компилятора.

0

84

Ivan написал(а):

Cкорее для конкретного компилятора(транслятора).

Можно заморочится, и написать рандомизирующий кодогенератор. Это никому не нужно, но опровергнет утверждение.

0

85

Лис написал(а):

Можно заморочится, и написать рандомизирующий кодогенератор. Это никому не нужно, но опровергнет утверждение.

Такая мысль мне приходила в голову, но если рандом есть только у одного компилятора, то это тоже его выдает. И опровержения не получится :)

0

86

Ivan написал(а):

Простой способ берешь компилятор ассемблера и компилируешь и получаешь маш.код

А как вы смотрите машинный код, соответствующий определённой инструкции?
Я знаю несколько способов, но вдруг ваш способ более удобный.

0

87

alextretyak написал(а):

А как вы смотрите машинный код, соответствующий определённой инструкции?
Я знаю несколько способов, но вдруг ваш способ более удобный.

Смотрю через objdump.

На входе .s файл:

Код:
 15 mov %eax, %ecx
 16 .byte 0x8b, 0xc8

В objdump:

Код:
    1000:	89 c1                	mov    %eax,%ecx
    1002:	8b c8                	mov    %eax,%ecx

0

88

Ivan написал(а):

Смотрю через objdump.

А с какими ключами вы его запускаете?
Я пробовал разные: и -s, и -d, и без параметров. И у меня всегда выдаёт:
objdump: test.s: File format not recognized

objdump же вроде как принимает только машинный код (исполняемые файлы или объектные .o). Разве ему можно скормить .s файл?

Отредактировано alextretyak (2024-09-20 12:13:56)

0

89

alextretyak написал(а):

А с какими ключами вы его запускаете?
Я пробовал разные: и -s, и -d, и без параметров. И у меня всегда выдаёт:
objdump: test.s: File format not recognized

objdump же вроде как принимает только машинный код (исполняемые файлы или объектные .o). Разве ему можно скормить .s файл?

Отредактировано alextretyak (Сегодня 12:13:56)

.s файл компилируется, получается исполнимый или объектный файл. Его и смотришь в objdump.
К примеру так
objdump -d ./main
Вообще, есть описание для objdump, запускается просто:
man objdump

Не понимаю почему у вас возникают с этим сложности?

Отредактировано Ivan (2024-09-20 12:56:12)

0

90

Ivan написал(а):

почему у вас возникают с этим сложности?

Потому что он не пользуется роботом для отвечания на вопросы, например
https://duckduckgo.com/?q=DuckDuckGo&ia=chat

Llama3 написал(а):

Вы пытаетесь использовать objdump для анализа файла с исходным кодом на ассемблере (.s). Однако objdump предназначен для работы с объектными файлами (.o) или исполняемыми файлами, а не с исходным кодом.

Чтобы проанализировать файл с исходным кодом на ассемблере, вам нужно сначала скомпилировать его в объектный файл с помощью ассемблера (например, as или gas). Затем вы можете использовать objdump для анализа полученного объектного файла.

Например, если у вас есть файл test.s с исходным кодом на ассемблере, вы можете скомпилировать его в объектный файл test.o с помощью команды:

bash

as -o test.o test.s

Затем вы можете использовать objdump для анализа объектного файла:

bash

objdump -d test.o

Эта команда выведет информацию о дисассемблированном коде в объектном файле.

Отредактировано Лис (2024-09-20 13:11:21)

0