汇编
MarkeyL
网络行业某产品部门开发,日常工作内容涉及嵌入式网络设备SSLVPN,国密,数字证书等模块.
同时也做一些SDWAN体系中集中管理平台的开发工作,也会经常和java打交道.
21年有跨平台图形客户端相关的工作内容,又开始接触C++和QT,以及qml.
展开
-
汇编——数据定义伪指令助记符DB DD DQ DT以及全称
DB 定义的变量为字节型 Define ByteDW 定义的变量为字类型(双字节)Define WordDD 定义的变量为双字型(4字节)Define Double WordDQ 定义的变量为4字型(8字节)Define Quadra WordDT 定义的变量为10字节型 Define Ten Byte...转载 2022-02-07 16:38:44 · 4368 阅读 · 0 评论 -
汇编——32位汇编基础框架
代码.586.model flat,stdcalloption casemap:noneincludelib ucrt.libincludelib legacy_stdio_definitions.libincludelib User32.libincludelib Kernel32.libMessageBoxA PROTO hwnd:DWORD,lpText:BYTE,lpCaption:BYTE,uTyoe:DWORDExitProcess PROTO uType:DWORD.原创 2022-02-07 15:37:08 · 3894 阅读 · 0 评论 -
汇编——16位汇编&调试&一些练习代码
编译:ml 1.asm调试:debug 1.exe调试命令:r 查看当前位置代码;p 单步步过;t 单步步入;u 查看附近代码d 0b3b 查看0b3b位置内存;g 运行程序16位汇编代码基本结构assume cs:code,ds:datadata segmentbuffer db 'xxxx$'data endscode segmentrkmain proc mov ax,data mov ds,ax mov dx,offset buffer mov ah,09H .原创 2022-02-07 10:58:31 · 1101 阅读 · 0 评论 -
汇编——段寄存器
CS段只有16位,8086CPU有20根地址线,地址该如何存储呢?答:地址除以16(十进制),此时地址以0结尾(十六进制)作为段地址。IP:指令指针寄存器,存储了指令的偏移地址CS:代码段DS:数据段ES:拓展段(和DS使用功能差不多)SS:栈段...原创 2022-01-30 12:38:40 · 466 阅读 · 0 评论 -
汇编——电路基础(计算机组成基础)
寄存器 = 一组锁存器地址线——决定取址范围控制线——CPU对外部器件的控制能力。例如决定是读是写(一般低电平是读)数据线——用来传输数据指令的概念 = 硬编码CPU的雏形原创 2022-01-29 13:57:56 · 933 阅读 · 0 评论 -
C语言与汇编——宏定义,头文件重复包含,内存申请和释放
.c文件 -> 替换 -> 编译 -> 链接 -> exe文件typedef 只能给变量类型起别名。而#define可以给任何东西起别名。头文件重复包含问题#pragma once也能避免同一个头文件被包含(include)多次一般由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。内存申请和释放..原创 2022-01-19 17:49:22 · 795 阅读 · 0 评论 -
汇编基础——算术移位,逻辑移位,循环移位,带进位的循环移位
算术左移和逻辑左移一样都是右边补0逻辑右移只要将二进制数整体右移,左边补0即可。算术右移二进制数整体右移后,左边要补上符号位。算术左移和算术右移主要用来进行有符号数的倍增,减半;逻辑左移和逻辑右移主要用来进行无符号数的倍增。减半。...原创 2022-01-18 10:21:08 · 3109 阅读 · 2 评论 -
C——数组指针
为什么px 与*px的地址值是一样的?#include "stdafx.h"int main(int argc, char* argv[]){ int arr[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; int(*px)[2]; //宽度:4 printf("%d\n", sizeof(px)); //赋值 px = (int(*)[2])arr; printf("%d\n", px); px++; .原创 2022-01-16 17:35:11 · 208 阅读 · 0 评论 -
C语言与汇编——字符串操作
常量区的概念原创 2022-01-06 16:34:33 · 119 阅读 · 0 评论 -
C语言与汇编——指针汇编相关
指针赋值&运算赋值++,–加减相减比较原创 2022-01-05 16:25:02 · 326 阅读 · 0 评论 -
C语言类型长度(int,long,long long)
不同系统下的C语言类型长度绝大部分64位的Unix,linux都是使用的LP64模型;32位Linux系统是ILP32模型;64位的Windows使用的是LLP64(long long and point 64)模型。原创 2021-12-21 16:38:49 · 1149 阅读 · 0 评论 -
c语言与汇编——参数/返回值/局部变量本质,数组反汇编
1、返回值是如何传递的?根据返回值类型,选择 正确大小的寄存器存储函数结果。2、参数传递的本质3、局部变量的内存分配4、数组的本质5、数组越界,基于缓冲区溢出的HelloWorldarr[6] = (int)HelloWord;这里相当于把HelloWord()函数的地址写到了堆栈中ebp+4的位置(本来应该存储的是CALL指令下一条指令的地址),导致Func()执行完ret时,eip变成了HelloWord()函数的地址。6、多维数组...原创 2021-12-21 16:20:47 · 230 阅读 · 0 评论 -
C语言与汇编——C语言基础与循环
1、变量的声明?什么是赋值?声明变量就是告诉计算机,我要用一块内存,你给我留着,宽度和存储格式由数据类型决定.计算机什么时候把这块内存给你,取决于变量的作用范围。如果是全局变量,在程序编译完就已经分配了空间,如果是局部变量,只有所在的程序被调用的时候,才会分配空间.全局变量如果不赋初始值,默认是0,但局部变量在使用前一定要赋初值(否则可能是垃圾值).2、类型转换MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.小转大:高位补符号位大转小:截去高位数据3、什么是表达式?表原创 2021-12-08 11:12:37 · 386 阅读 · 0 评论 -
c语言与汇编-内联汇编和调用约定
c语言与汇编-内联汇编和调用约定裸函数声明裸函数与普通函数的区别在于在函数前多声明了__declspec (naked)作用要讲裸函数的作用,就不得不提到裸函数与普通函数的区别裸函数与普通函数区别前面反汇编C语言的笔记里,我们可以得知一个普通空函数的反汇编代码并不少,保护现场、恢复现场等等都有,那么这些反汇编代码是如何产生的呢?答案是编译器会为我们产生这些反汇编代码相比之下,只要普通函数加上裸函数前缀转化为裸函数,编译器就会知道这个函数无需额外生成上面所说的保护现场、恢复现场等反汇编代码,原创 2021-11-22 16:22:46 · 429 阅读 · 0 评论 -
汇编基础-堆栈
原创 2021-11-17 17:23:43 · 208 阅读 · 0 评论 -
汇编基础-JMP,CALL,JCC
汇编基础-JMP,JCCJMP指令JMP指令:修改EIP的值JMP指令只影响了EIP,不影响堆栈和其它通用寄存器JMP 寄存器/立即数 相当于 MOV EIP,寄存器/立即数CALL指令CALL指令和JMP指令都会修改EIP的值但CALL指令会将返回地址(CALL指令的下一条指令地址)压入堆栈因此也会引起esp的变化RET指令call调用跳转后执行完相关代码完要返回到call的下一条指令时使用ret指令ret指令相当于pop eip(但是不能这么写)CMP指令指令格式:CMP R/原创 2021-11-15 17:24:02 · 1496 阅读 · 0 评论 -
汇编基础-EFLAGS,ADC/SBB/XCHG/MOVS/STOS/REP
汇编基础-EFLAGSEFLAGS查看DTDEBUG中的EFLAGS的值,然后转换成二进制的形式,并取出CF/PF/AF/ZF/SF/OF的值需要记的几个标志寄存器的位置和名称CF进位标志CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。PF奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。AF辅助进位标志AF(Auxiliary Carry原创 2021-11-12 16:26:00 · 737 阅读 · 0 评论 -
汇编基础-通用寄存器,内存读写,堆栈
汇编基础-通用寄存器通用寄存器ESP(Extended Stack Pointer)拓展栈寄存器,用于存放栈顶指针。EBP(Extended Base Pointer)拓展基址指针寄存器,用于存放栈底指针。MOV指令ADD指令ADD 目标操作数,源操作数将源操作数加到目标操作数中,结果放到目的操作数中SUB指令SUB 目标操作数,源操作数从目的操作数中减去源操作数,结果放到目的操作数中AND指令AND 目标操作数,源操作数源操作数和目标操作数做与运算,结果放到目的操作数中OR原创 2021-11-10 17:38:26 · 829 阅读 · 0 评论