Articles of nasm

用x86 32位Linux打印一个整数sys_write(NASM)

我是这个论坛的新手。 我对高级语言有一点经验(很less)。 大概在一个月前,我认为在linux上selectnasm(IA-32)之后,我开始从教程中学习,看看程序集是如何工作的。 现在,在结束之后,我试着写一个简单的程序,让你的计算机打印出100个数字(1 2 4 8 16 …)的列表,但是我甚至无法把它弄清楚。 我得到这个输出: 1PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP(continues)… 程序是这样的: section .text global main main: mov word [num], '1' mov ecx, 100 doubl: push ecx ; to push the loop counter mov eax, 4 mov ebx, 1 mov ecx, num mov edx, 1 int 0x80 sub ecx, 30h add ecx, ecx ; shl […]

execve shellcode linux分段错误

我试图运行这个shellcode,但它引发我:“分段错误”错误shellcode是以下内容: shellcode.asm: global _start _start: jmp short ca doit: pop ebx xor eax, eax cdq mov byte [ebx+7], al mov long [ebx+8], ebx mov long [ebx+12], eax lea ecx, [ebx+8] mov byte al, 0x0b int 0x80 ca: call doit db '/bin/sh' 我编译它:'nasm -f elf shellcode.asm'并链接它:'ld -m elf_i386 -s -o shellcode shellcode.o 我认为错误是当我使用mov [ebx + x],al […]

x86内存访问分段错误

好奇心,我正在学习x86组件。 我目前正在使用基于Linux的操作系统与NASM汇编器。 我很难理解为什么 SECTION .text global _start _start: nop mov ebx, 25 mov [0xFFF], ebx ;Exit the program mov eax, 1 mov ebx, 0 int 0x80 会导致分段错误(将ebx寄存器的内容移到内存位置0xFFF时)。 我以为用纯粹的ASM构build一个程序会让我无限制地访问我的进程的虚拟地址空间。 不是这样吗? 你将如何在组装中实现像堆一样的东西?

Assembly中系统调用的返回值是什么?

当我尝试研究内核系统调用的返回值时,我find描述它们的表格,以及我需要在不同的寄存器中放置什么来让它们工作。 但是,我没有find任何文件,它说明什么是我从系统调用返回的值。 我只是在不同的地方发现,我收到的将是EAX寄存器。 教程点 : 结果通常在EAX寄存器中返回。 汇编语言循序渐进:使用Linux进行编程 Jeff Duntemann在他的程序中多次声明: 查看EAX中sys_read的返回值 复制sys_read返回值以保持安全 我有任何网站没有解释这个返回值。 有没有互联网的来源? 或者可以有人解释我对这个价值?

Linux Shellcode“Hello,World!”

我有以下工作NASM代码: global _start section .text _start: mov eax, 0x4 mov ebx, 0x1 mov ecx, message mov edx, 0xF int 0x80 mov eax, 0x1 mov ebx, 0x0 int 0x80 section .data message: db "Hello, World!", 0dh, 0ah 在屏幕上打印“Hello,World!\ n”。 我也有以下C包装,其中包含以前的NASM目标代码: char code[] = "\xb8\x04\x00\x00\x00" "\xbb\x01\x00\x00\x00" "\xb9\x00\x00\x00\x00" "\xba\x0f\x00\x00\x00" "\xcd\x80\xb8\x01\x00" "\x00\x00\xbb\x00\x00" "\x00\x00\xcd\x80"; int main(void) { (*(void(*)())code)(); } 但是,当我运行代码,似乎汇编代码不执行,但程序退出罚款。 […]

你好世界在Windows程序集中使用nasm

我正在使用nasm来编译下面的程序集。 但是,代码在Windows下的控制台崩溃。 C:\> nasm -f win32 test.asm -o test.o C:\> ld test.o -o test.exe section .data msg db 'Hello world!', 0AH len equ $-msg section .text global _WinMain@16 _WinMain@16: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 int 80h mov ebx, 0 mov eax, 1 int 80h 根据这个post 。 mainfunction在Windows下不可用,必须由WinMainreplace。 因此,如果您的入口点是_start或main […]

如何将NASM的obj文件与Win10中的link.exe链接起来

我在NASM中有以下代码: ;sleep.asm [SECTION .text] global _start _start: xor eax,eax mov ebx, 0x00016630 ;address of Sleep mov ax, 5000 ;pause for 5000ms push eax call ebx ;Sleep(ms); 其中0x00016630是Sleep函数的地址(取自kernel32.dll的dumpbin)。 我想让可执行文件在Win 10中运行。我所做的是: nasm -f win32 sleep.asm 并有sleep.obj作为结果。 所以现在我必须链接它。 不幸的是我用下面的命令selectlink.exe link sleep.obj /entry:_start /subsystem:windows /nodefaultlib Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. LINK […]

如何在Windows上使用nasm生成dynamic链接的exe文件?

基本上我知道我们可以使用这个来创build一个静态链接在Windows 32位的EXE: nasm -fwin32 test.s cl.exe test.obj /link libcmt.lib 但如何创build一个dynamic链接的EXE从生成的obj文件nasm?