Articles of nasm

linux nasm程序集在terminal清除屏幕

有没有办法用nasm清除terminal窗口中的屏幕? 清除屏幕,我的意思是模拟Ctrl-L热键。 删除窗口中的所有文本。 这是可能做在nasm大会? 提前致谢, Rileyh

Linux x86 NASM – 子程序:从EAX打印一个双字

所以我正在学习使用NASM语法的x86 Linux汇编( 哦,上帝,不是这个 ,你们都在想)。 我试图做一个子例程,将简单的EAX输出到标准输出。 代码运行并没有错误退出,但没有打印。 我无法弄清楚为什么。 首先,这里是我正在工作的文件: segment .bss to_print: resd 1 segment .text global print_eax_val print_eax_val: ; (top) push dword ebx ;Stack: edx push dword ecx ; ecx push dword edx ; ebx ; (bot) mov ecx,eax ;ecx = eax mov [to_print],ecx ;to_print = ecx mov eax, 4 ;sys_write mov ebx, 1 ;to […]

x86 ASM Linux – 使用.bss部分

我希望这些问题很简单:(NASM编译器,Linux,x86 Intel语法) 第1部分: 我想弄清楚如何使用Assembly程序的.bss节来find一种方法来存储值,如从一个操作(+ – * /)的值,到一个声明的variables。 例如: section .bss variable: resb 50 ;Imaginary buffer section .text add 10,1 ;Operation ;move the result into variable 所以,我知道有可能用内核来读取用户input(但涉及到string,但是有没有办法将这个值复制到variablesvariables中,以便以后使用?这样会容易得多而不是必须推动和popup两件事情。 第2部分: 有没有办法删除.bss部分中的variables的值? 换句话说,如果我想在.bssvariables中存储一个新的值,那么我怎样才能做到这一点,而variables中已经存在的字符/值不会与新的值相混淆? 谢谢

“Hello World”function不使用C printf

更新 这是我与NASM合作的第二天。 彻底了解了这个之后 section .programFlow global _start _start: mov edx,len mov ecx,msg mov ebx,0x1 ;select STDOUT stream mov eax,0x4 ;select SYS_WRITE call int 0x80 ;invoke SYS_WRITE mov ebx,0x0 ;select EXIT_CODE_0 mov eax,0x1 ;select SYS_EXIT call int 0x80 ;invoke SYS_EXIT section .programData msg: db "Hello World!",0xa len: equ $ – msg 我想把这个东西包装在一个汇编函数中。 networking上的所有(或大部分)例子都是使用extern和C调用printf函数(见下面的代码) – 我不想这样做。 我想学会在程序集中创build一个“Hello […]

NASM Linux程序集打印整数

我正在尝试在linux上的nasm程序集中打印一个数字的整数。 我目前编译的很好,但没有写入屏幕。 任何人都可以向我解释我在这里做错了吗? section .text global _start _start: mov ecx, 1 ; stores 1 in rcx add edx, ecx ; stores ecx in edx add edx, 30h ; gets the ascii value in edx mov ecx, edx ; ascii value is now in ecx jmp write ; jumps to write write: mov eax, ecx ; […]

使用自定义引导加载程序创build可启动的ISO映像

我正试图将我用汇编语言编写的引导程序转换为ISO映像文件。 以下是来自MikeOS bootloader的代码。 这是我的bootloader代码: BITS 16 start: mov ax, 07C0h ; Set up 4K stack space after this bootloader add ax, 288 ; (4096 + 512) / 16 bytes per paragraph mov ss, ax mov sp, 4096 mov ax, 07C0h ; Set data segment to where we're loaded mov ds, ax mov si, text_string ; […]

如何打印一个ASCII字符?

在DOS程序集中,我们可以这样做: mov dl, 41h mov ah, 02h int 21h 但是,如何处理Linux nasm x86汇编?

用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一个程序会让我无限制地访问我的进程的虚拟地址空间。 不是这样吗? 你将如何在组装中实现像堆一样的东西?