De hecho, no he hecho el ejercicio adecuado para mí. . . Aunque puedo entender un poco de las instrucciones de ensamblaje, todavía no entiendo los registros y su uso adecuado. Aprendo el ensamblaje por intervalos, y el progreso es muy lento. . Y si no escribe durante un tiempo, olvida incluso la función del comando.
El primer gcc instalado en la computadora, usó nasm, pero luego no quiso usar gcc, ha estado usando msvc, y luego nasm no puede vincularse con msvc para generar archivos exe (tal vez estoy demasiado desordenado, no encontré la postura correcta), pero usando Microsoft El ensamblador ml también es bueno, aunque la sintaxis es ligeramente diferente, las instrucciones son similares, pero es muy molesto que printf / scanf no se pueda llamar todo el tiempo. . . Solo se puede usar win32api MessageBox o WriteFile en lugar de salida, pero ¿qué pasa con la entrada?
Esta es mi solución de error (Ghost sabe cuántas veces he usado el desmontaje para comprender un poco la lógica del ensamblaje, y ahora crack todavía solo repara bytes (cubre mi rostro)):
extrn MessageBoxA: PROC extrn ExitProcess: PROC .data ti db 'result', 0 msg db 'phahhb', 0 .code main proc sub rsp, 28h mov eax, offset msg ; lea edx, [eax + 1] loc_401086: mov cl , [eax] cmp cl, 0 jmp loc_401B12 inc eax cmp cl, 61h jl short loc_401086 ; prueba cl, cl sub cl, 20h mov [eax], cl jmp loc_401086 loc_401B12: mov rcx, 0; hWnd = HWND_DESKTOP lea rdx, [eax]; LPCSTR lpText lea r8, ti; LPCSTR lpCaption mov r9d, 0; uType = MB_OK call MessageBoxA add rsp, 28h mov ecx, eax; uExitCode = MessageBox (...) llamada ExitProcess main endp End
Aunque sé que mov [eax], cl está mal, debería escribirse en otro registro, pero soy tan estúpido que no sé en qué registro escribir para cambiar el carácter en la posición correspondiente de eax. . .
El siguiente es el bate que escribí yo mismo para facilitar la operación de pequeños proyectos de ensamblaje, que pueden usarse como plantilla en su lugar:
@echo off call "C: \ Archivos de programa (x86) \ Microsoft Visual Studio \ 2019 \ Community \ Common7 \ Tools \ VsDevCmd.bat" d: cd D: \ AssembleProjects \ hello \ ml64 "D: \ AssembleProjects \ hello \ hello .asm "/ link / subsystem: windows / DYNAMICBASE" C: \ Archivos de programa (x86) \ Windows Kits \ 10 \ Lib \ 10.0.18362.0 \ um \ x64 \ kernel32.lib "" C: \ Archivos de programa (x86) \ Kits de Windows \ 10 \ Lib \ 10.0.18362.0 \ um \ x64 \ user32.lib "/ LARGEADDRESSAWARE: NO /OUT:"D:\AssembleProjects\hello\hello.exe" / entry: main "D: \ AssembleProjects \ hello \ hello.exe " pausa