Articles of nasm

“66:PUSH 08”中的66代表什么?

testing平台是Windows 32位的。 我使用IDA pro反汇编一个PE文件,做一些非常繁琐的转换工作,并将其重新组装成一个新的PE文件。 但是如果我使用OllyDbg,重新组合的PE文件和原来的文件有一些区别 debugging新的PE文件(虽然在我转换的程序集文件中这部分没有区别) 这是原来的一部分: 看到了 PUSH 8 PUSH 0 是正确的。 这是我的新PE文件的一部分: 现在看 PUSH 8 PUSH 0 更改为 66:6A 08 66:6A 00 导致新的PE执行失败。 基本上,从我所看到的,它导致了堆栈的不一致。 那么有人知道这部分有什么问题吗? 我看不到在我转换的汇编代码中的任何差异…. 任何人都可以给我一些帮助吗? 谢谢!

如何链接64位Windows计算机上的32位Nasm汇编对象代码

我从http://www.dreamincode.net/forums/topic/328714-my-program-keeps-crashing/find了下面的代码。 global start ;~ msvcrt.dll extern _printf %define printf _printf ;~ kernel32.dll extern ExitProcess, GetCommandLineW, LocalFree %define GetCommandLine GetCommandLineW ;~ shell32.dll extern CommandLineToArgvW %define CommandLineToArgv CommandLineToArgvW SECTION .data message db 'Hello, World', 13, 10, 0 fmtstr db "%s", 0 fmtstrCL db "Arg","%d", " = ", "%S", 13, 10, 0 section .bss pNumArgs resd 1 section […]

汇编:处理windows nasm中的用户input

我是一个新手,试图做一个简单的问候世界,等待用户按一个键结束。 现在,你好,世界是好的,但我从这个刚刚closures的.exe控制台程序,而我希望它留在屏幕上,直到用户按下一个键。 现在我遇到的问题是,由于某种原因,程序不断循环,search用户input,但是当我强制closures程序(^ C)我可以看到我按下的所有键被写在下一个控制台线,如if它使用了错误的缓冲区(?) 我一直在整个互联网寻找一个修复了几天,最后我寻求帮助,因为这是让我疯狂的^^我发现的一切都是基于int系统或linux下,而我必须处理窗户api … 非常感谢你,任何帮助或暗示,欢迎! 代码: STD_OUTPUT_HANDLE equ -11 STD_INPUT_HANDLE equ -10 NULL equ 0 global start extern ExitProcess, GetStdHandle, WriteConsoleA, ReadConsoleInputA section .data msg db "Hello World!", 13, 10, 0 msg.len equ $ – msg consoleInHandle dd 1 section .bss buffer resd 2 buffer2 resd 2 section .text start: push STD_OUTPUT_HANDLE call […]

.data部分是否被加载到内存中?

我已经尝试了下面的testing,看看程序执行时.data节是否被加载到内存中: global _start section .data arr times 99999999 DB 0xAF section .text _start: jmp _start ; prevent process from terminating 组装和链接: nasm -f win32 D:\file.asm link D:\file.obj /OUT:D:\file.exe /ENTRY:start /SUBSYSTEM:CONSOLE 我已经执行了这个程序,结果如下: 正如你所看到的,程序只占用了276 KB的内存,而它的数组大小为99999999字节!

如何在汇编程序中更改屏幕背景

这是作业: 如何清除屏幕并更改汇编程序中的前景色和背景色(Windows上的NASM) 编辑:事实certificate,答案是类似的 mov bh, 71h int 10h

NASM程序集中的Windows API哔声function

我正在尝试在NASM程序集中使用Windows API,只是一些基本的函数调用和什么。 所以,我去了MSDN网站,了解了Beepfunction。 它表示,它需要两个值,包括双重字,频率和持续时间。 所以这就是我的汇编程序的样子: NULL equ 0 ; null global _start ; entry point extern Beep, ExitProcess ; the stuff I need section .data beepfreq dd 37 ; limit of 37 to 32,767 beepdur dd 300 ; This is in milliseconds section .bss dummy resd 1 ; nothing section .text _start: push beepfreq ; […]

我怎样才能在win32汇编(特别是nasm)得到一个脉冲?

我打算制作一个时钟。 一个实际的时钟,而不是Windows的东西。 不过,我想现在可以编写大部分的代码。 我将使用一个PIC16F628A来驱动时钟,它有一个我可以访问的定时器(实际上,除了内置的时钟外,它还有3个定时器)。 但是,Windows似乎没有这个function。 这使得一个时钟有点难,因为我需要知道多久,所以我可以更新当前的时间。 所以我需要知道如何在Windows中获得一个脉冲(1Hz,1KHz,只要我知道速度有多快就不重要)。

Cygwin:兼容性问题

你好,StackOverFlowers! 我是非常新的整个Linux的东西,我使用Cygwin来尝试做下面的事情.. 通过parsing器放置testing文件… ./parser < test.c > test.asm //工作并生成ASM代码 按照教程中描述的那样做这一行,我不确定它究竟是什么… nasm -f elf test.asm //工作 最后这行创buildexectuable(如果我正确理解教程) ld -s -o test test.o ld: i386 architecture of input file test.o' is incompatible with i386:x86-64 output此行的ld: i386 architecture of input file test.o' is incompatible with i386:x86-64 output 。 我知道这是因为我试图从32位到64位,但我不知道如何解决这个问题。 我试过使用elf_i386,但是我得到了ld: unrecognised emulation mode: elf_i386. Supported emulations: i386pep i386pe […]

在32位Windows上与NASM汇编创build一个exe文件

我在32位Windows 7上用NASM汇编语言编写一个hello世界程序。 我的代码是: section .text global main ;must be declared for linker (ld) main: ;tells linker entry point mov edx,len ;message length mov ecx,msg ;message to write mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .data msg […]

我可以使用一个寄存器作为循环计数器吗?

由于函数的调用约定规定哪些寄存器被保留,寄存器可以用作循环计数器吗? 我首先想到的是, ecx寄存器被用作循环计数器,但是在发现我使用的stdcall函数没有保留ecx的值之后,我想不然了。 是否有保存的寄存器(至less大部分使用的调用约定)被保存? 注意:在使用堆栈variables作为循环计数器时,我没有问题,我只是想确保它是唯一的方法。