汇编
barbyQAQ
这个作者很帅,什么都没留下…
展开
-
nasm x64汇编:输入数字比较大小并打印结果
Linux下x64汇编。输出结果:num1num1 dq 42%dint32ddeaxrax。原创 2024-10-15 16:49:51 · 242 阅读 · 0 评论 -
汇编实现strcpy
【代码】汇编实现strcpy。原创 2023-07-22 09:38:03 · 1105 阅读 · 0 评论 -
gdb使用记录
gdb原创 2022-06-03 08:30:43 · 185 阅读 · 0 评论 -
解决nasm汇编gdb无法单步调试
解决nasm汇编gdb无法单步调试Single stepping until exit from function _start, which has no line number information.原创 2022-06-02 21:13:20 · 741 阅读 · 0 评论 -
nasm汇编调用C库
1原创 2022-06-02 15:06:23 · 473 阅读 · 0 评论 -
64位汇编传参规则
1原创 2022-06-02 08:35:37 · 655 阅读 · 0 评论 -
5.C调用约定
前言在不同的语言中,变量存储传递参数返回值的方式有所不同,这种差异成为语言的调用约定,因为它表述了在调用函数时函数预期得到什么样的数据。使用最广泛的是C语言调用约定,它也是Linux平台的标准。知识点栈一般,栈顶的地址要小于栈底的地址,所以说栈是向下增长的(向地址减小的方向。)栈寄存器%esp总是包含一个指向当前栈顶的指针(地址),无论栈顶在何处。如果我们只想访问栈顶的值,而不想移除它,可以这样:movl (%esp), %eax访问栈顶的下一个值:movl 4(%esp),原创 2022-04-07 21:55:33 · 197 阅读 · 0 评论 -
4.寻址方式
内存地址引用的通用格式如下:地址或偏移 (%基址寄存器,%索引寄存器,比例因子)结果地址 = 地址或偏移 + %基址或偏移寄存器 + 比例因子 * %索引寄存器地址或偏移、比例因子必须是常量,其余两个必须是寄存器。省略任何一项,都会用0代替。直接寻址方式movl ADDRESS, %eax会将内存地址ADDRESS加载到%eax索引寻址方式movl string_start(,%ecx,1), %eax从string_start开始,将该地址与1 * %ec原创 2022-04-07 21:55:02 · 357 阅读 · 0 评论 -
3.查找最大值
代码#目的:本程序查找彝族数据项中的最大值#变量:寄存器有以下用途:# %edi 保存正在检测的数据项索引# %ebx 当前已经找到的最大数据项# %eax 当前数据项##使用以下内存位置:# data_items 包含数据项,0表示结束#.section .data data_items: .long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0.section .text .globl _start_start原创 2022-04-07 21:54:31 · 238 阅读 · 0 评论 -
2.汇编概要
示例代码#目的: 退出并向Linux内核返回一个状态码的简单程序。#输入: 无#输出: 返回一个状态码。运行程序后通过echo $?来读取状态码#变量: # %eax保存系统调用号# %ebx保存返回状态.section .data.section .text.globl _start_start: movl $1, %eax #用于退出程序的Linux内核命令号(系统调用) movl $0, %ebx #返回给操作系统的状态码 #改变这个数字,echo $原创 2022-04-07 21:53:58 · 264 阅读 · 0 评论 -
1.第一个程序
#目的: 退出并向Linux内核返回一个状态码的简单程序。#输入: 无#输出: 返回一个状态码。运行程序后通过echo $?来读取状态码#变量: # %eax保存系统调用号# %ebx保存返回状态.section .data.section .text.globl _start_start: movl $1, %eax #用于退出程序的Linux内核命令号(系统调用) movl $0, %ebx #返回给操作系统的状态码 #改变这个数字,echo $?的值会不原创 2022-04-07 21:53:23 · 152 阅读 · 0 评论 -
64位linux下玩32位汇编编程
无法按照原来的方式,直接用as test32.s -o test32.o汇编直接用ld test32.o -o test32链接直接报错,由于我的linux是64位,解决方法就是在两个命令选项中加上适当的选项即可。正确的命令是这样的,直接用as test32.s -o test32.o --32 汇编直接用ld -m elf_i386 test32.o -o test32链接 其中:-m参数是让ld模仿后面跟的连接器,也就是elf_i386格式的连接器,转载 2022-04-07 21:39:56 · 238 阅读 · 0 评论 -
Intel格式和AT&T格式汇编区别
https://www.cnblogs.com/hdk1993/p/4820353.html转载 2022-04-06 09:27:24 · 146 阅读 · 0 评论 -
gcc使用intel汇编语法
我有以下代码,可以使用gcc命令gcc ./example.c正确编译。 程序本身调用函数" add_two",该函数仅将两个整数相加。 要在扩展汇编说明中使用intel语法,我需要首先切换到intel,然后再切换回AT&T。 根据gcc文档,可以使用gcc -masm=intel ./exmaple完全切换到intel语法。每当我尝试使用开关-masm=intel进行编译时,它都不会编译,我也不明白为什么? 我已经尝试删除指令.intel_syntax,但仍然无法编译。12345678转载 2022-04-06 08:52:19 · 1614 阅读 · 0 评论