Skip to content

Latest commit

 

History

History
76 lines (72 loc) · 6.94 KB

assembler.org

File metadata and controls

76 lines (72 loc) · 6.94 KB

Assembler

https://habr.com/ru/post/569204/#comment_23288698 Обычно ассемблер является отображением машинных кодов практически 1 в 1. Мы, например, на 1 курсе университета писали программы в машинных кодах в debug.exe, чтобы потом вздохнуть с облегчением, когда начался ассемблер. Да транслятор вычисляет размеры операндов и адреса меток за вас, но в остальном не сказал бы, что есть какая-то существенная разница. Зная ассемблер, например, вы можете в отладчике остановиться на вызове функции отображения месседжбокса (“This program is not licensed”), промотать код немножко вверх и заменить jne на je (например, обычно конечно всё сложнее) - и вот уже программа принимает любой ключ, кроме собственно верного. Затем, зная, где находится это место в коде - открываете какой-нибудь HIEW и патчите опкод перехода руками. Просматривая голые hex-коды сделать то же самое будет гораздо сложнее.

llvm-mc

oleg@guixsd ~$ echo "0x33 0xc0 0x31 0xc0" | /gnu/store/…-llvm-10.0.0/bin/llvm-mc -mcpu=i686 -disassemble -show-inst
	.text
	xorl	%eax, %eax              # <MCInst #15207 XOR32rr_REV
                                        #  <MCOperand Reg:22>
                                        #  <MCOperand Reg:22>
                                        #  <MCOperand Reg:22>>
	xorl	%eax, %eax              # <MCInst #15206 XOR32rr
                                        #  <MCOperand Reg:22>
                                        #  <MCOperand Reg:22>
                                        #  <MCOperand Reg:22>>

Learning