汇编
文章平均质量分 84
天马行空_
先生不知何许人也。微信:without_sec,欢迎交流,互相学习。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用windbg调试器定位程序的内存泄漏
windbg是windows平台下功能强大且轻量级的调试器,支持调试C/C++、C#等。之前在定位差压总控台的崩溃bug时,用到了windbg,功能比较强大,但是用起来比较费劲,需要记忆常用的命令,最重要的是界面比较丑。使用windbg最关键的是符号的配置,符号文件是链接程序过程中,生成的附件文件,其内容包含全局变量,局部变量,函数名称和入口地址,源代码行号等,符号对于调试应用程序非常重要。使用VS编译程序时,默认生成了以pdb结尾的符号文件。对于windows公共的系统程序(exe,动态库原创 2021-07-31 09:47:49 · 2008 阅读 · 0 评论 -
理解汇编语言
从汇编语言中,可以很好地理解CPU的运行,特别是对计算机整体架构的理解。冯诺依曼最早提出了以存储器为核心的现代电子计算机架构。从编程语言的层次上看,汇编语言属于低级语言。计算机只可以识别(译码)二进制,但是为什么呢?因为计算机的元器件只有高低电平之分,而没有高、中高、中、中低和低之分,如果有这些,那也许计算机可以识别5进制的数了,就像控制灯的开关,只有开和关两个状态,现在某些灯可以调整亮度,可以理解调整电流的大小?而对于计算机的元器件,例如晶体二极管,它只有两个状态。计算机识别0和1,其实是识别电.原创 2021-06-12 22:51:47 · 1572 阅读 · 0 评论 -
【深入理解】C函数调用与汇编语言
函数在调用时,需要关注的有几个点,如何传递参数,如何返回到原来的地方继续执行。今天通过查看函数对应的汇编进行分析。函数和调用函数的代码如下:long long add(long long x, long long y) { long long sum = x + y; return sum;}…long long x = 3, y = 7;long long a = add(x, y);函数add有两个long long的参数x和y,在函数中,有一个局部变量sum,赋值原创 2020-10-14 13:16:18 · 647 阅读 · 0 评论 -
程序运行时,为什么栈的访问比堆的访问更快?
我不是在问,程序转换为汇编代码后,访问堆的汇编代码,多了一步,就是访问栈中的指针(局部的指针),再去访问堆。从汇编代码层面,直接访问栈和堆,为什么access stack faster than heap?是CPU缓存机制吗,还是其他?...原创 2020-09-27 21:31:41 · 418 阅读 · 0 评论 -
C语言参数传递所使用的寄存器
探索下C语言的函数是如何传递参数的,寄存器?栈?,何时使用寄存器,使用哪些寄存器,什么时候使用栈来传递参数。这是容易疑惑的地方。用gcc编译C程序,看看C语言是如何传递参数的。同时用到了edb调试器。使用的操作系统是linux 64位。思路是编写一个简单的函数,具有个数不同的参数。函数没有具体的意义,纯粹是为了探索C语言的函数是如何传递参数的。函数有1个参数// a.c// gc...原创 2020-02-09 13:12:53 · 9210 阅读 · 0 评论 -
mips汇编字符串比较strcmp
compare是函数,参数保存在寄存器$a0和$a1,分别表示两个字符串的首地址,字符串以零作为结尾。.data str1: .asciiz "abcd" str2: .asciiz "abc".text .globl mainmain: la $a0, str1 la $a1, str2 jal compare move $a0, $v0 li $v0, 1 sy...原创 2019-04-12 18:50:27 · 1500 阅读 · 0 评论 -
[8086汇编]int 21h dos函数码
在8086汇编中,会用到很多的中断调用,21h中断是最常用的,这里总结下21h的函数功能码,以及一些小的example code。下图是int 21h DOS函数码。包括控制台读写,获取系统信息,文件目录管理等。(int 21h DOS功能码)01 Read character from STDINinput: AH = 01output: AL = read cha...原创 2019-04-16 15:46:49 · 2852 阅读 · 0 评论 -
[8086汇编]读取无符号整数并打印该整数
使用0ah中断调用号,读取字符串,然后将字符串转换成整数,打印该整数。; read u int number; readuint.asm; masm.exe readuint.asm; link.exe readuint.obj; readuint.exedata segmentbuf db 5db ?db 5 dup(?)number dw 0data endsco...原创 2019-04-26 13:20:17 · 1334 阅读 · 0 评论 -
[逆向,栈溢出]《0day安全:软件漏洞分析技术》2.3.2控制程序的执行流程 复现
记录一下。程序使用dev-cpp编译运行,注意要修改为32位debug,安装的ollydbg只能调试32位的应用程序。C源代码,来自书上。多了两个头文件string.h和stdlib.h。#include <stdio.h>#include <string.h>#include <stdlib.h>#define PASSWORD "1234...原创 2019-05-02 11:20:08 · 409 阅读 · 0 评论 -
windows 64使用nasm
在windows中使用nasm与在Linux中有所不同,主要在于函数的调用方式,nasm在linux中使用系统调用或C库函数时,参数使用寄存器的顺序是rdi,rsi,rdx,rcx,r8,r9,而在windows下,函数参数保存到rcx,rdx,r8,r9。windows和Linux的系统调用有很多不同,windows的系统调用可以理解为Windows提供给程序员的API,也可以称为系统调用。...原创 2019-04-12 18:42:27 · 8239 阅读 · 1 评论 -
[0xa] nasm汇编 [递归:阶乘]
使用nasm进行递归的编写,汇编代码的递归编写和C语言非常相似。; fac.asm; ubuntu 64; compile: nasm -f elf64 -o fac.o fac.asm; link: gcc -o fac fac.o; run: ./facextern printfsection .data num: dq 5 fmt: db 'fab(%...原创 2019-03-13 15:12:36 · 425 阅读 · 0 评论 -
[0xb] nasm汇编 [结构体]
在C语言中使用struct声明结构体,而在nasm汇编中,也可以使用结构体,通过使用伪指令来声明结构体。下面的struc代码展示了如何在nasm汇编中使用结构体。; struc.asm ubuntu 64; compile: nasm -f elf64 -o struc.o struc.asm; link: gcc -o struc struc.o; run: ./struc...原创 2019-03-14 16:40:13 · 1138 阅读 · 0 评论 -
[0x02] NASM汇编 [输出hello world!]
nasm官方文档:https://www.nasm.us/xdoc/2.14.03rc2/nasmdoc.pdf当遇到问题时,可以在文档中查询,文档是英文的,需要一定的英语阅读能力。下面是一个输出的例子。; hello.asmsection .data msg db 'hello, world!',0xa len equ $-msgsection .textg...原创 2019-02-24 13:52:00 · 2086 阅读 · 0 评论 -
[0x03] NASM汇编 [寄存器]
NASM中,在64位模式下,可以使用下面的寄存器:AL/AH, CL/CH, DL/DH, BL/BH, SPL, BPL, SIL, DIL, R8B−R15B AX, CX, DX, BX, SP, BP, SI, DI, R8W−R15W EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D−R15D RAX, RCX, RDX, RBX, RS...原创 2019-02-24 14:31:08 · 1851 阅读 · 0 评论 -
[0x04] nasm汇编 [数据声明和定义]
在[0x02]和[0x03]中,举了一个打印hello, world!的例子,然后介绍了在nasm中的寄存器,以及一些特定的寄存器。这节介绍数据的定义和声明。首先,要知道数据的长度,这就最基本的,就像在c语言中,char,short,int,long,long long,float,double,这些类型的字节长度是必须要知道的,在汇编中也一样。下面的表格展示了常用的数据类型。类型 ...原创 2019-02-25 10:45:24 · 3907 阅读 · 0 评论 -
[0x05] nasm汇编 [调试]
在汇编过程中,难免出现问题,需要调试,如果每次测试,都要打印可能有问题的变量,效率会非常低。掌握调试的技巧非常重要。这里使用gdb调试器,gdb是是开源组织gnu发布的,功能强大,可以调试多种语言的代码。以下面的test5_1.asm为例,展示基本的调试技巧。; test5_1.asm; nasm -f elf64 -g -o test5_1.o test5_1.asm; ld -o...原创 2019-02-25 14:27:39 · 1516 阅读 · 0 评论 -
[0x06] nasm汇编 [调用C库函数]
在nasm中,调用C库函数,需要使用extern关键字,后面跟函数名称。例子test6_1.asm; test6_1.asm; nasm -f elf64 -o test6_1.o test6_1.asm; gcc -o test6_1 test6_1.o; 或者链接: ld -o test6_1 test6_1.o -lc --dynamic-linker /lib/x86_64...原创 2019-02-26 11:04:21 · 1630 阅读 · 0 评论 -
[0x09] nasm汇编 [循环:冒泡排序]
上节介绍了简单的加减乘除运算,在除法div运算时,被除数存放在寄存器rdx:rax中,执行除法后,商存放在rax中,余数存放在rdx中;乘法mul运算中,一个乘数存放在rax中,乘法运算的结果存放在rdx:rax中。这节介绍循环,以一个冒泡排序的例子:b_sort.asm; b_sort.asm; bubble sort; nasm -f elf64 -o b_sort.o b_so...原创 2019-03-02 16:21:32 · 1036 阅读 · 3 评论 -
[0x07] nasm汇编 [求和]
问题描述:输入两个整数,使用函数求出两个整数的和,并打印。这节介绍函数的使用,并对两个整数进行求和。这个过程中用到了C的库函数printf和scanf,因此需要链接C的动态链接库。思路:使用scanf输入两个整数,然后压入栈中,调用add函数。话不多说,代码如下add.asm:; add.asm; nasm -f elf64 -o add.o add.asm; gcc -o ...原创 2019-02-26 17:53:06 · 1059 阅读 · 0 评论 -
[0x08] nasm汇编 [运算:加减乘除]
上节介绍了使用栈调用函数,call指令调用的时候,将当前的IP值压入栈。函数返回的时候,将栈顶的元素pop到IP中,由于默认使用_cdecl调用,因此需要调用者平衡栈。这节介绍基本的运算:加减乘除。nasm使用Intel汇编指令,可以通过查阅Intel官方文档,这里是Intel指令官方文档:https://www.intel.cn/content/dam/www/public/us/en/...原创 2019-02-27 14:05:24 · 3111 阅读 · 0 评论 -
[0x01] NASM汇编 [安装NASM]
NASM是一个汇编器,适用于多个平台。这里介绍NASM在ubuntu上的安装。首先去官网下载列表进行下载:https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D这里下载的是nasm-2.14.03rc2.tar.gz,链接:https://www.nasm.us/pub/nasm/releasebuilds/2.14.03rc2/nasm...原创 2019-02-24 12:58:09 · 1212 阅读 · 0 评论
分享