@XRFD

Как дизассемблировать код программы?

Как дизассемблировать код программы. Можно инструкцию?
.486
.model flat,stdcall
options casemap : none ;case sentivive
include windows.inc
include user32.inc
include kernel32.inc
incudelib user32.lib
includelib kernel.lib
;#######################################################
.data
szTitle db "Message",0
szMessage db "Hello, World!",0
.code
start:
push MB_OK + MB_ICONINFORMATION ; Кнопка и пиктограмамма
push offset szTitle ;строка заголовок окна
push offset szMessage ; текст выводимого сообщения
push 0 ;указатель на родительское окно
call MessageBox
push 0 ;код завершения программы
call ExitProcess
end start
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
486 ; это заголовок и опции для программы
.model flat,stdcall
options casemap : none ;case sentivive
include windows.inc ; макросы для виндоуз
include user32.inc ; макросы для user32
include kernel32.inc
incudelib user32.lib ; библиотека  для user32 именно она и нужна для линковки
includelib kernel.lib
;#######################################################
.data
szTitle db "Message",0
szMessage db "Hello, World!",0
.code
start:
; старт программы  и передача аргументов в стек см. код на с ниже
push MB_OK + MB_ICONINFORMATION ; Кнопка и пиктограмамма
push offset szTitle ;строка заголовок окна
push offset szMessage ; текст выводимого сообщения
push 0 ;указатель на родительское окно
call MessageBox ; вызов функции
push 0 ;код завершения программы
call ExitProcess ; выход из программы с кодом возврата 0
end start


https://learn.microsoft.com/en-us/windows/win32/ap...
int MessageBox(
  [in, optional] HWND    hWnd,
  [in, optional] LPCTSTR lpText,
  [in, optional] LPCTSTR lpCaption,
  [in]           UINT    uType
);


То есть вам ничего не нужно дизасемблировать, но если вам нужно push MB_OK + MB_ICONINFORMATION ; Кнопка и пиктограмамма

это числа определенные в инклюдах

Апдейт
---------------------------------------
Устанавливаете масм по моей ссылке.
Фиксите код

.486
.MODEL  Flat,StdCall
	OPTION  CaseMap:None
	include \masm32\include\windows.inc
	include \masm32\include\user32.inc
	include \masm32\include\kernel32.inc
	includelib \masm32\lib\user32.lib
	includelib \masm32\lib\kernel32.lib

;#######################################################
.data
	szTitle db "Message",0
	szMessage db "Hello, World!",0
.code
start:
	push MB_OK + MB_ICONINFORMATION ; Кнопка и пиктограмамма
	push offset szTitle ;строка заголовок окна
	push offset szMessage ; текст выводимого сообщения
	push 0 ;указатель на родительское окно
	call MessageBox
	push 0 ;код завершения программы
	call ExitProcess
end start


Создаете файл для сборки build.bat

set path=c:\masm32\bin
set lib=c:\masm32\lib
REM собираем без излишних сообщений в формате coff только обьектный файл
ml /c  /nologo /coff test.asm 
REM линкуем для виндоуз, релиз, ставим маленькое выравнивание что бы меньше был файл, указываем что библиотеки не нужны и указываем явно какие линкуем, сливаем 2 секции для уменьшения размера
link /SUBSYSTEM:WINDOWS  /release /opt:win98 /NODEFAULTLIB kernel32.lib user32.lib /MERGE:.rdata=.text /MERGE:.data=.text test.obj


Ок дальше дизасемблим через https://www.ollydbg.de/download.htm

63f61288d2a92096069384.png

Видим что код совпадает, сравните с исходным.

PS странный у вас препод
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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