首页 > 其他分享 >nasm随笔

nasm随笔

时间:2023-06-30 21:56:39浏览次数:47  
标签:输出 调用 mov start 设置 message 随笔 nasm

masm X86

assume cs:code
code segment
  org 100h
  mov ax,0xb800h
  mov ds,ax
  mov bx,0
  mov byte ptr ds:[bx],0x61h ;'a'
  add bx,2
  mov byte ptr ds:[bx],0x6dh ;'s'
  add bx,2
  mov byte ptr ds:[bx],0x73h ;'m'

  jmp $ ;死循环
code ends
end
section .data
    message db 'This is a debug message', 10
    len equ $ - message

section .text
    global _start

_start:
    mov eax, 4       ; 设置系统调用号
    mov ebx, 1       ; 设置文件描述符为标准输出
    mov ecx, message ; 设置要输出的消息的内存地址
    mov edx, len     ; 设置要输出的消息的大小
    int 0x80 

bash

nasm -f elf32 program.asm -o program.o
ld -m elf_i386 program.o -o program
./program 
分析x64和x86
x64:

section .data
    message_start:
    db 'This is a debug message', 10;10是‘\n’
    len equ $ - message_start

section .text
    global _start

_start:
    mov eax, 4       ; 设置系统调用号
    mov ebx, 1       ; 设置文件描述符为标准输出
    mov ecx, message_start ; 设置要输出的消息的内存地址
    mov edx, len     ; 设置要输出的消息的大小
    int 0x80         ; 触发系统调用
/*
在第一条指令中,eax寄存器存储了系统调用号,这告诉操作系统要执行什么样的系统调用。在这个例子中,使用了系统调用号4,代表write系统调用。

在第二条指令中,ebx寄存器存储了文件描述符(fd),用于指示要向哪个流写入数据。在这个例子中,将它设置为1,即标准输出。这意味着要将输出写入控制台。

在第三条指令中,ecx寄存器存储了要输出的数据(即消息)的地址。它指向数据在内存中的位置。

在第四条指令中,edx寄存器存储了要输出的数据的大小(即消息的长度)。

接下来,使用'int 0x80'指令触发一个中断,使操作系统内核根据存储在eax中的系统调用号来调用相应的系统调用(即write系统调用)。操作系统内核在这个例子中将读取ebx寄存器中存储的文件描述符、ecx寄存器中存储的数据的地址和edx寄存器中存储的数据大小,并将数据输出到标准输出流中。

因此,这四个寄存器是用于将write系统调用所需的参数传递给操作系统内核的,使它可以将数据输出到控制台。
*/

x86:
 	mov ax, 4        ; 设置系统调用号
        mov bx, 1        ; 设置文件描述符为标准输出
        mov cx, message_start  ; 设置要输出的消息的内存地址
        mov dx, len      ; 设置要输出的消息的大小

        mov ds, cx       ; 将message_start所在的段地址加载到DS寄存器
        mov ah, 09h      ; 设置为DOS的输出服务
        int 21h          ; 调用DOS系统中断,输出字符串

        mov ah, 4Ch      ; 设置为DOS系统退出服务
        int 21h          ; 调用DOS系统中断,程序退出
  message_start db 'Hello World!', 0Dh, 0Ah, '$'  ; 要输出的消息
  len EQU $-message_start      ; 计算消息的长度

标签:输出,调用,mov,start,设置,message,随笔,nasm
From: https://www.cnblogs.com/userhhh/p/17517884.html

相关文章

  • 正则随笔
    正则表达式是用于匹配字符串中字符组合的模式。下面是一些基本的正则判断//匹配字母constreg1=/[a-zA-Z]///匹配数字constreg2=/\d///匹配非数字constreg3=/\D///空格constreg4=/\s///字母、数字、下划线constreg5=......
  • js随笔
    JavaScript(缩写:JS)是一门完备的动态编程语言。当应用于HTML文档时,可为网站提供动态交互特性。由布兰登·艾克(BrendanEich,Mozilla项目、Mozilla基金会和Mozilla公司的联合创始人)发明。JavaScript的应用场合极其广泛,简单到幻灯片、照片库、浮动布局和响应按钮点击,复杂到游戏......
  • go随笔
    1)声明在函数内部,是函数的本地值,类似private2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似protect3)声明在函数外部且首字母大写是所有包可见的全局值,类似public一个Go工程中主要包含以下三个目录:src:源代码文件pkg:包文件bin:相关b......
  • mysql随笔
    备份exchangedb库下的systemtable表mysqldump--defaults-extra-file=/etc/my_pass.txt--flush-logs--single-transaction--set-gtid-purged=OFFexchangedbsystemtable>/data/system_config.sql查看binlog执行的具体操作/usr/bin/mysqlbinlog--no-defaults-v-v--bas......
  • 真·随笔
    6.27今天开这玩意本来是有点东西想写的,结果写别的写着写着忘了。哦想起来了。我自己是一个空心的人,看书、电影之类的太少了。自己的价值判断也是一团乱麻,有很多小镇做题家(非针对这一群体,只是引用一下想象中这个群体的的刻板印象)身上对个人发展不利的部分。最近也不是很有空,但是......
  • 真·随笔(三)《政治学通识》笔记
    读书太少了,还天天鉴证,没底子。看点东西充实一下。中国政治观:中国古代(孔子、韩非)、海国图志、孙中山、当代。孙:管理众人的事便是政治。孔子对曰:“政者,正也。子帅以正,孰敢不正?”……翻译成现代政治学语言,可以表述为“政府是社会的道德榜样”。借助这种视角,大家可以理解目前中国......
  • 真·随笔(一)关于高考难度
    最近各省2023年高考分数和一分一段表都公布了,整体而言分数是偏高的。关于这个问题,网上有许多观点,我基于这些观点提出一些自己的看法。一、高考数学难度阴晴不定,是否是一种不公平?著名化竞教练孙延波有过一个在竞赛圈中非常著名的观点:考试无常论。每一场考试,改变难度、换一道题,......
  • Handle Table 及 ObCreateHandle 相关随笔
    文章来源于对 https://rayanfam.com/topics/reversing-windows-internals-part1/的理解。1. HandleTable结构体如下所示(Win10,x64,Intel)kd>dtnt!_HANDLE_TABLE+0x000NextHandleNeedingPool:Uint4B+0x004ExtraInfoPages:Int4B+0x008TableCode......
  • Linux将home磁盘空间分给root_随笔记
    ==========================================将home空间配给roottarcvf/home.tar/home#备份家目录fuser-km/home#终止家目录所有进程umount/home#卸载家目录lvremove/dev/mapper/......
  • 生活反思随笔 2023.6 -
    [1]当投身于漫长的事业时,我们需要信心之源泉来维持内心的平静,因此我们能好好地坚持下去。当信心的来源来自于亲友时,我们心怀感激。当独自上路时,我们时常锻炼我们自信之肌肉,并对我们的自信心怀感激。[2]“德智体美劳”这个小时候常听到的五个综合的个人修养评价指标,实际放到成......