Как читать / пишут .exe машинный код вручную?

Вы можете использовать Camera.ScreenToWorldPoint .

Затем вам может потребоваться изменить координату z результата на 0 или что-то еще, что вам нужно, чтобы поместить куб на нужной высоте над плоскостью.

12
задан Ciro Santilli 新疆改造中心法轮功六四事件 23 May 2015 в 13:04
поделиться

12 ответов

OllyDbg is an awesome tool that disassembles an EXE into readable instructions and allows you to execute the instructions one-by-one. It also tells you what API functions the program uses and if possible, the arguments that it provides (as long as the arguments are found on the stack).

Generally speaking, CPU instructions are of variable length, some are one byte, others are two, some three, some four etc. It mostly depends on the kind of data that the instruction expects. Some instructions are generalised, like "mov" which tells the CPU to move data from a CPU register to a place in memory, or vice versa. In reality, there are many different "mov" instructions, ones for handling 8-bit, 16-bit, 32-bit data, ones for moving data from different registers and so on.

You could pick up Dr. Paul Carter's PC Assembly Language Tutorial which is a free entry level book that talks about assembly and how the Intel 386 CPU operates. Most of it is applicable even to modern day consumer Intel CPUs.

The EXE format is specific to Windows. The entry-point (i.e. the first executable instruction) is usually found at the same place within the EXE file. It's all kind of difficult to explain all at once, but the resources I've provided should help cure at least some of your curiosity! :)

15
ответ дан 2 December 2019 в 03:29
поделиться

ACD Вероятно, See использует тот факт, что .EXE-файлы не проверяют длину файла или что-либо, превышающее ожидаемую часть файла. Из-за этого вы можете создать .EXE-файл, который откроет себя и загрузит все данные за пределы заданной точки в виде данных. Это полезно, потому что вы можете затем создать .EXE, который работает с данным набором данных, просто прикрепив эти данные к концу надлежащим образом написанного .EXE

(я понятия не имею, что именно ACD See означает, так что принимайте это с большая доля соли, но я знаю , что некоторые программы создаются таким образом.)

1
ответ дан 2 December 2019 в 03:29
поделиться

И ваше любопытство, и ваш уровень понимания именно там, где я был в какой-то момент. Я настоятельно рекомендую Код: Скрытый язык аппаратного и программного обеспечения . Это не ответит на все вопросы, которые вы здесь задаете, но проливает свет на некоторые аспекты черной магии компьютеров. Это толстая книга, но очень удобочитаемая.

1
ответ дан 2 December 2019 в 03:29
поделиться

Win32 exe формат на MSDN

Я бы предложил взять немного исходного кода Windows C и собрать и начать отладку в Visual Studio. Переключитесь на вид разборки и перешагните через команды. Вы можете увидеть, как код C был скомпилирован в машинный код - и посмотреть, как он выполняется пошагово.

1
ответ дан 2 December 2019 в 03:29
поделиться

Содержимое файла EXE описано в Portable Executable . Он содержит код, данные и инструкции для ОС по загрузке файла.

Между машинным кодом и сборкой существует соотношение 1: 1. Программа дизассемблера выполнит обратную операцию.

На i386 нет фиксированного количества байтов на инструкцию. Некоторые - это один байт, некоторые - намного длиннее.

5
ответ дан 2 December 2019 в 03:29
поделиться

Просто по этому вопросу, кто-нибудь еще читал такие вещи, как CD 21?

Я вспомнил Сандру Баллок в одном шоу, на самом деле читая скрин с шестнадцатеричными числами и выясняя, что делает программа. Вроде как текущая версия чтения кода Matrix.

Если вы читаете такие вещи, как CD 21, как вы помните различные комбинации?

1
ответ дан 2 December 2019 в 03:29
поделиться

If it's as foreign to you as it seems, I don't think a debugger or disassembler is going to help - you need to learn assembler programming first; study the architecture of the processor (plenty of documentation downloadable from Intel). And then since most machine code is generated by compilers, you'll need to understand how compilers generate code - the simplest way to write lots of small programs and then disassemble them to see what your C/C++ is turned into.

A couple of books that'll help you understand:-

2
ответ дан 2 December 2019 в 03:29
поделиться

You can use debug from the command line, but that's hard.

C:\WINDOWS>debug taskman.exe
-u
0D69:0000 0E            PUSH    CS
0D69:0001 1F            POP     DS
0D69:0002 BA0E00        MOV     DX,000E
0D69:0005 B409          MOV     AH,09
0D69:0007 CD21          INT     21
0D69:0009 B8014C        MOV     AX,4C01
0D69:000C CD21          INT     21
0D69:000E 54            PUSH    SP
0D69:000F 68            DB      68
0D69:0010 69            DB      69
0D69:0011 7320          JNB     0033
0D69:0013 7072          JO      0087
0D69:0015 6F            DB      6F
0D69:0016 67            DB      67
0D69:0017 7261          JB      007A
0D69:0019 6D            DB      6D
0D69:001A 206361        AND     [BP+DI+61],AH
0D69:001D 6E            DB      6E
0D69:001E 6E            DB      6E
0D69:001F 6F            DB      6F
4
ответ дан 2 December 2019 в 03:29
поделиться

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

Формат раздела зависит от того, что в нем. Раздел кода содержит машинный код в соответствии с исполняемой целевой архитектурой. В наиболее распространенных случаях это Intel x86 или AMD-64 (так же, как EM64T) для двоичных файлов Microsoft PE. Формат машинного кода - CISC и восходит к 8086 и ранее. Важным аспектом CISC является то, что размер его инструкций не является постоянным, вы должны начать читать в нужном месте, чтобы извлечь из него что-то ценное. Intel публикует хорошие руководства по набору команд x86 / x64.

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

И еще есть MSIL EXE: исполняемые файлы .NET, содержащие промежуточный язык Microsoft, не содержат машинный код, а код .NET CIL. Спецификации для этого доступны онлайн в ECMA.

Их можно просмотреть с помощью такого инструмента, как Reflector.

5
ответ дан 2 December 2019 в 03:29
поделиться

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

6
ответ дан 2 December 2019 в 03:29
поделиться

Чтобы получить представление, установите точку останова для некоторого интересного кода, а затем перейдите в окно ЦП. .

Если вас интересует больше, проще скомпилировать короткие фрагменты с помощью Free Pascal с помощью параметра -al.

FPC позволяет выводить сгенерированный ассемблер во множестве форматов ассемблера (TASM, MASM, GAS) используя параметр -A, и вы можете иметь исходный код паскаля, чередующийся в комментариях (и более) для легкой перекрестной ссылки.

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

2
ответ дан 2 December 2019 в 03:29
поделиться

Знакомство с сборкой низкого уровня (я имею в виду сборку низкого уровня, а не «макросы» и этого быка), вероятно, необходимо. Если вы действительно хотите напрямую читать необработанный машинный код, обычно вы используете для этого шестнадцатеричный редактор. Однако, чтобы понять, что делают инструкции, большинство людей использовали бы дизассемблер, чтобы преобразовать это в соответствующие инструкции сборки. Если вы относитесь к меньшинству, желающему понимать сам машинный язык, я думаю, вам понадобятся Руководства для разработчиков по архитектурам Intel® 64 и IA-32 . Том 2 специально посвящен набору команд, который относится к вашему запросу о том, как читать сам машинный код и как с ним связана сборка.

1
ответ дан 2 December 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: