
汇编语言
枫舞的季节
回家的路弯弯曲曲很容易令人迷失方向慢慢地慢慢地尘埃落下路已经走了大半了山的轮廓慢慢可以看得清了慢慢慢慢地揭开一层层的面纱就像翻起一张张的ppt 一样雾遮掩着山就像记忆中的家乡夜也在悄悄降临暮霭的颜色越来越迷人了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用YASM编程 - 04
在linux下使用yasm 先介绍 64位的汇编开发;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;test_linux.asm ;在Linux下使用yasm ;安装: yasm sudo apt install yasm ;编译: yasm -f elf64 -o test_linux.o test_linux.c ;链接 ld -e start -dynam原创 2017-09-04 17:01:32 · 522 阅读 · 0 评论 -
使用YASM编程 -07 模拟导入表
模拟导入表 导入表的调用方式 call xxx ; xxx 是导入函数的名称 xxx: jmp DWORD [fn] ; 是远程间接跳转 fn : DD 0x12345678 ; 跳到全局地址继续执行 这个0X12345678 是在运行的时候输入,然后就可以从这里继续执行 我们把OutputDebug原创 2017-09-18 18:18:58 · 470 阅读 · 0 评论 -
使用YASM编程 - 01
YASM 继承了NASM ,扩展了支持的语法和平台 支持INTEL 格式语法和 GNU AS 语法 下面是一个例子,实现了简单的invoke 调用和编程的一个基本的框架 它能够: 0 win32 程序,控制台打印 1 调用外部程序 2 被外部调用(入口函数) 3 数据段 4 代码段 5 函数定义 6 函数从栈传入参数,从eax返回值 7 编译 8 链接;;;;;;;;;;;;原创 2017-09-01 18:12:47 · 3973 阅读 · 0 评论 -
使用YASM编程 - 02
Yasm 支持的GAS(Gnu asm)格式 实现: 1 基本框架 2 调用外部API 3 导出_start 4 mov xor push 等 5 使用 label 数字 寄存器 6 定义数字和定义字符串常量 7 编译 8 链接/********************************************************* * Gnu asm 注释和字符串风格原创 2017-09-02 13:36:42 · 882 阅读 · 0 评论 -
使用YASM编程 - 03
使用宏实现类似masm invoke 第一种方法: 使用重载的多行宏,然后根据参数不同实现不同;当参数为1的时候直接调用函数 ;call _printf ;invoke _printf %macro invoke 1 call %1 %endmacro ;当有参数的时候,2个参数或更多参数 %macro invoke 2-* ;定义一个单行宏为函数名称原创 2017-09-03 17:45:17 · 467 阅读 · 0 评论 -
使用YASM编程 - 05
我们一般实现C语言的 汉诺塔的时候,代码类似下面; ;void hanno(a,b,c,n) ;{ ; if(n==1) ; { ; printf("%c %c\n",a,c); ; return ; ; } ; hanno(a,c,b,n-1) ; hanno(a,b,c,1) ; hann原创 2017-09-10 13:32:32 · 454 阅读 · 0 评论 -
使用YASM编程 - 06
我们写汇编程序的时候,往往无法基于汇编代码的思考,只能使用类C语言的方式来进行编程。于是就要从C语言->最细伪代码->用寄存器替代为机器理解代码。 现在以起泡法举例。bubble() { int a[]={5,10,4,29,33,47,18}; int n = sizeof(a)/sizeof(a[0]) for(int i=1;i<n;i++) {原创 2017-09-12 18:22:55 · 691 阅读 · 0 评论 -
sse 指令xmm寄存器和内存互相复制的问题
下面是一段可以执行的x64 的 nasm 汇编代码,类似可执行文件的外壳代码 bits 64 global start extern MessageBoxA section .text start: push rbp push rax push rbx push rcx push rdx push rsi push rdi pu原创 2018-01-09 16:24:06 · 4917 阅读 · 0 评论 -
VC 中 有符号扩展和无符号扩展问题
VC 中 有符号扩展和无符号扩展问题 先看一个例子 void test1() { short int x = 0xe101; short int y = 7; unsigned int z = x+(7&lt;&lt;16); printf("%x",z); } 结果是什么呢?先告诉大家答案是 0x6e101 但是我们算应该是 0x7e101的,为什么是这个数呢. 在我们编译的过程...原创 2019-01-23 09:41:46 · 689 阅读 · 0 评论