win32常用的汇编指令和寄存器

2023-05-16



通用寄存器
EAX 累加(Accumulator)寄存器 AX(AH、AL) 常用于乘、除法和函数返回值
EBX 基址(Base)寄存器 BX(BH、BL) 常做内存数据的指针, 或者说常以它为基址来访问内存.
ECX 计数器(Counter)寄存器 CX(CH、CL) 常做字符串和循环操作中的计数器
EDX 数据(Data)寄存器 DX(DH、DL) 常用于乘、除法和 I/O 指针
ESI 来源索引(Source Index)寄存器 SI 常做内存数据指针和源字符串指针
EDI 目的索引(Destination Index)寄存器 DI 常做内存数据指针和目的字符串指针
ESP 堆栈指针(Stack Point)寄存器 SP 只做堆栈的栈顶指针; 不能用于算术运算与数据传送
EBP 基址指针(Base Point)寄存器 BP 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送
指令指针寄存器
EIP 指令指针(Instruction Pointer)寄存器 总是指向下一条指令的地址; 所有已执行的指令都被它指向过.
标志寄存器
EFLAGS

标志(Flag)寄存器:
EFLAGS 中的 32 位被分成 0-31 个二进制位分别使用;
第 0、2、4、6、7、11 位是状态标志位;
第 10 位是字符串操作控制标志位;
其他标志位一般不用或无权使用
 

0 CF 进位(Carry)标志 目标无法容纳无符号算术运算的结果, 需要进位或借位时被设置; 可用 STC 指令设置, CLC 指令取消.
1      
2 PF 奇偶(Parity)标志 低 8 位中有偶数个 1 时被设置
3      
4 AF 辅助(Auxiliary)标志 使用 BCD 码运算导致 3 位到 4 位产生进位时被设置
5      
6 ZF 零(Zero)标志 运算结果为 0 时被设置
7 SF 符号(Sign)标志 运算结果为负数时被设置
8      
9      
10 DF 方向(Direction)标志 字符串操作是从高位到低位时被设置; 可用 STD 指令设置, CLD 指令取消.
11 OF 溢出(Overflow)标志 因有符号运算的结果太宽而导致数据丢失时被设置
...      
31      
...          


其中的 EAX、ECX、EDX 三个寄存器相对自由些, 所以练习时用它们较多.

没理会段寄存器: CS、DS、SS、ES、FS、GS, 是因在 Win32 保护模式下编程它们不再重要了.

还有 FPU、MMX 系列寄存器, 等用到再说吧.


通用寄存器
EAX 累加(Accumulator)寄存器 AX(AH、AL) 常用于乘、除法和函数返回值
EBX 基址(Base)寄存器 BX(BH、BL) 常做内存数据的指针, 或者说常以它为基址来访问内存.
ECX 计数器(Counter)寄存器 CX(CH、CL) 常做字符串和循环操作中的计数器
EDX 数据(Data)寄存器 DX(DH、DL) 常用于乘、除法和 I/O 指针
ESI 来源索引(Source Index)寄存器 SI 常做内存数据指针和源字符串指针
EDI 目的索引(Destination Index)寄存器 DI 常做内存数据指针和目的字符串指针
ESP 堆栈指针(Stack Point)寄存器 SP 只做堆栈的栈顶指针; 不能用于算术运算与数据传送
EBP 基址指针(Base Point)寄存器 BP 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送
指令指针寄存器
EIP 指令指针(Instruction Pointer)寄存器 总是指向下一条指令的地址; 所有已执行的指令都被它指向过.
标志寄存器
EFLAGS

标志(Flag)寄存器:
EFLAGS 中的 32 位被分成 0-31 个二进制位分别使用;
第 0、2、4、6、7、11 位是状态标志位;
第 10 位是字符串操作控制标志位;
其他标志位一般不用或无权使用
 

0 CF 进位(Carry)标志 目标无法容纳无符号算术运算的结果, 需要进位或借位时被设置; 可用 STC 指令设置, CLC 指令取消.
1      
2 PF 奇偶(Parity)标志 低 8 位中有偶数个 1 时被设置
3      
4 AF 辅助(Auxiliary)标志 使用 BCD 码运算导致 3 位到 4 位产生进位时被设置
5      
6 ZF 零(Zero)标志 运算结果为 0 时被设置
7 SF 符号(Sign)标志 运算结果为负数时被设置
8      
9      
10 DF 方向(Direction)标志 字符串操作是从高位到低位时被设置; 可用 STD 指令设置, CLD 指令取消.
11 OF 溢出(Overflow)标志 因有符号运算的结果太宽而导致数据丢失时被设置
...      
31      
...          



其中的 EAX、ECX、EDX 三个寄存器相对自由些, 所以练习时用它们较多.

没理会段寄存器: CS、DS、SS、ES、FS、GS, 是因在 Win32 保护模式下编程它们不再重要了.

还有 FPU、MMX 系列寄存器, 等用到再说吧.


软件逆向的定义:

软件逆向工程是通过反汇编和调试等手段,分析计算机程序的二进制可执行代码从而获得程序的算法细节和实现原理的技术。

研究对象:没有公开源代码的计算机程序,主要是已经经过编译的二进制可执行代码(如win32平台上的PE文件,包括exe,dll等文件格式)。

软件逆向的分类:

(1)  系统级逆向:大范围分析观察,整体把握

(2)  代码级逆向:程序二进制码中提取设计理念和算法

软件逆向步骤:

(1)  研究保护方法,去除保护功能:解码/反汇编(目标二进制代码)

(2)  反汇编目标软件,定位功能函数:中间语言翻译(汇编或类汇编代码)

(3)  分析汇编代码:数据流分析(各级中间语言)

(4)  修改汇编代码或还原高级源代码:其他分析和优化(高级抽象代码)

软件逆向工具:

(1)  Ollydbg:动态追踪工具,插件较好较多

(2)  Windbg:用户态和内核态调试工具

(3)  IDA:交互式反汇编器

(4)  PEID:著名的查壳工具

(5)  C32Asm:反汇编程序,可直接修改软件内部代码,有十六进制编辑模式

软件逆向的主要应用:

(1)  软件破解:破解软件的版权让用户不支付授权费用就可以使用软件的全部功能。

(2)  病毒和恶意程序的分析:恶意程序的传播机制和危害并设计出解,分析病毒解决办法。

(3)  系统漏洞分析:分析漏洞原理,设计补丁程序或者编写利用程序(Exploit)

(4)  分析不公开的文件格式,协议等

(5)  分析windows或mac平台上的硬件驱动程序编写linux下的相应驱动

(6)  挖掘消费电子产品的潜能

(7)  挖掘操作系统未文档化的API,发现更多内幕

(8)  计算机犯罪取证


软件开发基础知识:

目前通用的编程语言有两种形式:汇编语言和高级语言

汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用英文缩写的标识符,更容易识别和记忆。汇编程序通常由三部分组成:指令,伪指令,宏指令。

高级语言所编写的程序不能直接被计算机识别,必须经过转换(目标代码即机器码)才能被执行,按照转换方式可将他们分为两类:

(1)  解释类:边翻译边执行

(2)  编译类:先翻译在执行

 

C语言的特点:

(1)  c语言允许直接访问物理地址,可以直接对硬件进行操作

(2)  c语言程序代码质量高,程序执行效率高

(3)  c语言使用范围大,可移植性好


常见的汇编指令:

(1)汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。

(2)用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。

(3)由于汇编更接近机器语言,能够直接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存,因此在一些对于时效性要求很高的程序,许多大型程序的核心模块以及工业控制方面大量应用。

(4)关于汇编语言的种类,可以说有多少中不同内核的CPU,就有多少种汇编语言。

(5)不同内核的CPU,必须有对应的汇编语言编译器将汇编语言编写的程序编译成对应CPU的机器语言代码,CPU才能正确识别和执行这些代码。

(6)不同架构的CPU的汇编指令集并不相同。

(7)不同的汇编程序有不同的汇编语言规定。

(8)常用的汇编程序有ASM,MASM,TASM,OPTASM等。

 

寄存器:

寄存器是存储信息的单元或者说是器件,这里讨论的寄存器都是CPU中的寄存器,位于CPU内部,而内存位于CPU外部。

对于一个汇编程序员来说,CPU中主要可以使用的也就是寄存器而已,汇编程序员可以使用指令来读写CPU中的寄存器,从而实现对于CPU的控制,当然,不同的CPU,寄存器的个数和结构都是不一样的。

8086 CPU中寄存器总共为14个,且均为16位(32位和64位均已16位为基础)

即 AX BX  CX  DX SP  BP  SI DI  IP  FLAG CS  DS  SS  ES共14个。这14个寄存器按照一定的方式又分为通用寄存器,控制寄存器,段寄存器。

 

通用寄存器:

AX,BX,CX,DX称作为数据寄存器:

AX:累加寄存器,也称为累加器

BX:基地址寄存器

CX:计数器寄存器

DX:数据寄存器


SP和BP又称作为指针寄存器:

       SP:堆栈指针寄存器

       BP:基指针寄存器


SI和DI又称作为变址寄存器:

       SI:源变址寄存器

       DI:目的变址寄存器

 

控制寄存器:

       IP:指令指针寄存器

       FLAG:标志寄存器

 

段寄存器:

       CS:代码段寄存器

       DS:数据段寄存器

       SS:堆栈段寄存器

       ES:附加段寄存器

 

堆栈:

       堆栈都是一种数据项按序排序的数据结构,只能在一端(称为栈顶)对数据项进行插入和删除。主要功能是暂时存放数据和地址,通常用来保护断电和现场。

       堆:队列优先,先进先出

       栈:先进后出

堆栈中定义了一些操作,两个最重要的是PUSH和POP。

PUSH操作在堆栈的顶部加入一个元素,POP操作相反,在堆栈顶部移去一个元素,并将堆栈的大小减一。

 

机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。

汇编语言:是用助记符,符号和数字等来表示指令的程序设计语言,它与机器语言指令是一一对应的。

   

重点掌握常用指令功能及应用:

       常用传送指令

       加减法指令

       逻辑运算和移位指令

       控制转移指令

       字符(串)输入输出功能调用


(1)  数据传送指令:MOV/XCHG,PUSH/POP,LEA

(2)  算数运算类指令:ADD/ADC/INC,SUB/SBB/DEC/CMP/NEG,MUL/IMUL,DIV/IDIV

(3)  位操作类指令:AND/OR/XOR/NOT/TEST

(4)  控制转移类指令:JMP/JCC/LOOP,CALL/RET,INT n

(5)  处理机控制类指令:NOP

 

Inter 8086指令系统共有117条基本指令:

可分为6个功能组:

(1)  数据传送类指令

(2)  算数运算类指令

(3)  位操作类指令

(4)  串操作类指令

(5)  控制转移类指令

(6)  处理机控制类指令

 

1.    数据传送类指令:

数据传送是计算机中最基本,最重要的一种操作,传送指令也是最常用的一类指令,传送指令把数据从一个位置传送到另一个位置。

除标志寄存器传送指令外,均不影响标志位。

重点掌握一下指令:

MOV   XCHG   PUSH  POP   LEA

(1)  传送指令MOV:把一个字节或操作数从源地址传送至目的地址。

(2)  交换指令XCHG:把两个地方的数据进行互换。

寄存器与寄存器之间对换数据

寄存器与存储器之间对换数据

不能在存储器与存储器之间对换数据

(3)  进栈指令PUSH:

Push r16/m16/seg  操作过程:1. SP<-SP-2  2.SS:[SP]<-r16/m16

同理POP是出栈指令,操作与PUSH相反。

 

2.    算数运算类指令:

四则运算是计算机经常进行的一种操作,算术运算指令实现二进制(十进制)数据的四则运算。

注意算术运算类指令对标志的影响

掌握ADD/ADC/INC   ,  SUB/SBB/DEC/NEG/CMP

熟悉 MUL/IMUL   ,  DIV/IDIV

理解 CBW/CWD  ,  DAA/DAS ,  AAA/AAS/AAM/AAD

(1)  加法指令ADD:

功能:ADD指令将源与目的操作数相加,结果送到目的操作数

ADD指令按状态标志的定义相应设置状态标志

ADD reg, imm/reg/mem  reg<-reg+imm/reg/mem

(2)  带进位加法指令ADC:

ADC指令将源与目的的操作数相加,在加上进位CF标志,结果送到目的操作数

ADC指令按状态标志的定义相应设置状态标志

ADC指令主要与ADD配合,实现多精度加法运算

ADD reg , imm/reg/mem

ADC mem , imm/reg

(3)  增量指令INC:

INC指令对操作数加1(增量)

INC指令不影响进位CF标志,按定义设置其他状态标志

INC reg/mem    reg/mem<-reg/mem+1

(4)  减法指令SUB:

SUB指令将目的操作数减去源操作数,结果送到目的操作数

SUB指令按照定义相应设置状态标志

SUB reg , imm/reg/mem    reg<-reg-imm/reg/mem

(5)  带借位减法指令SBB:

SBB指令将目的操作数减去源操作数,在减去借位CF(进位),结果送到目的操作数。

SBB指令主要与SUB配合,实现多精度减法运算

SBB reg , imm/reg/mem    reg<-reg-imm/reg/mem-CF

(6)  减量指令DEC:

DEC指令对操作数减1(减量)

DEC reg/mem    reg/mem<-reg/mem-1

INC指令和DEC指令都是单操作数指令,主要用于对计数器和地址指针的调整。

(7)  求补指令NEG:

NEG指令对操作数执行求补运算:用0减去操作数,然后结果返回操作数,求补运算也可以表达成,将操作数按位取反后加1

NEG指令对标志的影响与用0作减法的SUB指令一样

NEG reg/mem     reg/mem<-0-reg/mem

(8)  比较指令CMP:

CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志

CMP指令执行的功能与SUB指令类似,但结果不回送目的操作数。

CMP reg , imm/reg/mem    reg—imm/reg/mem

 

3.    位操作指令:

位操作指令以二进制为基本单位进行数据的操作,这是一类常用的指令。

(1)逻辑运算指令:ADD(与)  OR(或)  XOR(异或)  NOT(非)   TEST(测试)

(2)移位指令:SHL(逻辑左移)   SHR(逻辑右移)   SAL(算术左移)   SAR(算术右移)

(3)循环移位指令:ROL(左循环移位)   ROR(右循环移位)   RCL(带进位左循环移位)   RCR(带进位右循环移位)

1)逻辑运算指令ADD:对两个操作数执行逻辑与运算,结果送到目的操作数。ADD des , src     des<-des^src

2)逻辑运算指令OR:对两个操作数执行逻辑或运算,结果送到目的操作数,OR dest , src       dest<-destv src

3)逻辑运算指令XOR:对两个操作数执行逻辑异或运算,结果送到目的操作数。XOR dest , src

4)逻辑运算指令NOT:对一个操作数执行逻辑非运算。NOT reg/mem,按位取反,原来的0的位变1,原来的1的位变0

 

4.    控制转移类指令:

用于实现分支,循环,过程等程序结构,是仅次于传送指令的常用指令。

重点掌握:JMP/JCC/LOOP  ,   CALL/RET

INT n/IRET 常用系统功能调用

一般了解:LOOPZ/LOOPNZ   INTO

(1)  无条件转移指令JMP:

JMP label;程序转向label标号指定的地址(标号要在程序其他位置标出)

只要执行无条件转移指令JMP,不需要任何条件,就使程序转到指定的目的地址处,从目标地址开始执行指令。

操作数是要转移到的目标地址。

转移原理:1.程序的执行地址,是由段寄存器CS和指令指针IP共同确定的,即当前指令的地址为CS:IP。2.程序的跳转是通过修改CS和IP的值来实现的。

(2)  条件转移指令JCC:

Jcc label  ; 条件满足,发生转移:IP<-IP+8位位移量;条件不满足,顺序执行。

指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令,条件不成立,则程序将顺序执行下一条指令。

操作数label是短转移指令,要跳转的地址必须距当前IP地址-128~+127个单元的范围之内

Jcc指令不影响标志,但要利用标志,根据利用的标志位不同,16条指令分为3种情况:

1)       判断单个标志位状态

2)       比较无符号数高低

3)       比较有符号数大小

(3)  循环指令LOOP:

循环指令是一种特殊的转移指令,当满足某条件时,反复执行一系列操作,知道不满足为止。

格式: LOOP label

循环指令利用CX寄存器作为计数器

(4)  子程序指令:

子程序是完成特定功能的一段程序

当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行

当运行完子程序功能后,采用RET返回指令回到主程序继续执行

子程序通常是与主程序分开完成特定功能的一段程序,程序中有时要反复的实现相同的功能只不过参数不同而已,把仅参数不同功能重复的程序编写成为子程序,执行这个功能时,就可以调用该子程序,执行完成后在返回主程序。

CALL指令分成4中类型:

1)       CALL label; 段内调用,相对寻址。

2)       CALL r16/m16;段内调用,间接寻址

3)       CALL far ptr label;段间调用,直接寻址

4)       CALL far ptr mem;段间调用,间接寻址

(5)  中断指令:

中断是一种改变程序执行顺序的方法,在程序运行时,遇到某些需要紧急处理的情况,如停电,数据的实时接收,溢出等,处理器暂停主程序的执行,转去执行中断处理程序。

中断分类:内部中断,外部中断

中断指令:INT

INT i8

IRET:中断返回指令,实现中断返回

INTO:溢出中断指令

 

5.    处理机控制类指令:

对CPU状态进行控制的指令。

NOP CS:SS:DS:ES

LOCK  HLT  ESC  WAIT

(1)  空操作指令NOP:不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期。

(2)  NOP常用于程序调试,在需要预留指令空间时用NOP填充,代码空间多余时也可以用NOP填充,还可以用NOP实现软件延时。

(3)  事实上,NOP和XCHG,AX,的指令代码一样都是90H

(4)  段超越前缀指令:在允许段超越的存储器操作数之前,使用段超越前缀指令,将采用指定的段寄存器寻址操作数。

CS:使用代码段的数据

SS:使用堆栈段的数据

DS:使用数据段的数据

ES:使用附加段的数据

 

6.    伪指令

没有对应的机器码的指令,最终不被CPU所执行。伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。

segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。

segment和ends的功能是定义一个段,segment说明一个段开始,ends说明一个段结束。

一个段必须有一个名称来标识,使用格式为:

        段名 segment

        段名 ends

一个汇编程序是由多个段组成的,这些段被用来存放代码,数据或当作栈空间来使用。

一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。

end是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令end,就结束对源程序的编译。

不要搞混end和ends


通用寄存器
EAX 累加(Accumulator)寄存器 AX(AH、AL) 常用于乘、除法和函数返回值
EBX 基址(Base)寄存器 BX(BH、BL) 常做内存数据的指针, 或者说常以它为基址来访问内存.
ECX 计数器(Counter)寄存器 CX(CH、CL) 常做字符串和循环操作中的计数器
EDX 数据(Data)寄存器 DX(DH、DL) 常用于乘、除法和 I/O 指针
ESI 来源索引(Source Index)寄存器 SI 常做内存数据指针和源字符串指针
EDI 目的索引(Destination Index)寄存器 DI 常做内存数据指针和目的字符串指针
ESP 堆栈指针(Stack Point)寄存器 SP 只做堆栈的栈顶指针; 不能用于算术运算与数据传送
EBP 基址指针(Base Point)寄存器 BP 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送
指令指针寄存器
EIP 指令指针(Instruction Pointer)寄存器 总是指向下一条指令的地址; 所有已执行的指令都被它指向过.
标志寄存器
EFLAGS

标志(Flag)寄存器:
EFLAGS 中的 32 位被分成 0-31 个二进制位分别使用;
第 0、2、4、6、7、11 位是状态标志位;
第 10 位是字符串操作控制标志位;
其他标志位一般不用或无权使用
 

0 CF 进位(Carry)标志 目标无法容纳无符号算术运算的结果, 需要进位或借位时被设置; 可用 STC 指令设置, CLC 指令取消.
1      
2 PF 奇偶(Parity)标志 低 8 位中有偶数个 1 时被设置
3      
4 AF 辅助(Auxiliary)标志 使用 BCD 码运算导致 3 位到 4 位产生进位时被设置
5      
6 ZF 零(Zero)标志 运算结果为 0 时被设置
7 SF 符号(Sign)标志 运算结果为负数时被设置
8      
9      
10 DF 方向(Direction)标志 字符串操作是从高位到低位时被设置; 可用 STD 指令设置, CLD 指令取消.
11 OF 溢出(Overflow)标志 因有符号运算的结果太宽而导致数据丢失时被设置
...      
31      
...          


其中的 EAX、ECX、EDX 三个寄存器相对自由些, 所以练习时用它们较多.

没理会段寄存器: CS、DS、SS、ES、FS、GS, 是因在 Win32 保护模式下编程它们不再重要了.

还有 FPU、MMX 系列寄存器, 等用到再说吧.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

win32常用的汇编指令和寄存器 的相关文章

  • excel操作的几种方法

    using System using System Collections Generic using System Text using System Data using System Windows Forms using Syste
  • c#中如何实现拷贝对象

    大家都知道 xff0c 在C 中变量的存储分为值类型和引用类型两种 xff0c 而值类型和引用类型在数值变化是产生的后果是不一样的 xff0c 值类型我们可以轻松实现数值的拷贝 xff0c 那么引用类型呢 xff0c 在对象拷贝上存在着一定
  • 深入了解Windows句柄到底是什么

    总是有新入门的Windows程序员问我Windows的句柄到底是什么 xff0c 我说你把它看做一种类似指针的标识就行了 xff0c 但是显然这一答案不能让他们满意 xff0c 然后我说去问问度娘吧 xff0c 他们说不行网上的说法太多还难
  • 句柄概念

    句柄 xff08 handle xff09 xff0c 有多种意义 xff0c 其中第一种是指程序设计 xff0c 第二种是指Windows编程 现在大部分都是指程序设计 程序开发这类 第一种解释 xff1a 句柄是一种特殊的 智能指针 当
  • 腾讯云大数据发布最新产品矩阵,助力企业整合打通海量数据

    9月11日 xff0c 主题为 释放数字经济发展的新动能 的腾讯全球数字生态大会大数据专场在线上拉开帷幕 腾讯大数据领域的多位顶级专家 xff0c 与包括 Hadoop 创始人 Doug Cutting 在内的业内顶级大咖 xff0c 以及
  • C/C++中函数参数传递

    看了内存管理的有关内容 xff0c 有一点了解 xff0c 但不是很深入 xff0c 发现之前写代码时有很多细节问题没有注意到 xff0c 只知道这样做可以实现功能 xff0c 却不知道为什么可以这样 xff0c 对于采用自己的方法造成的隐
  • Windows窗口刷新机制详解

    1 Windows的窗口刷新管理 窗口句柄 xff08 HWND xff09 都是由操作系统内核管理的 xff0c 系统内部有一个z order序列 xff0c 记录着当前窗口从屏幕底部 xff08 假象的从屏幕到眼睛的方向 xff09 x
  • C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

    BSS段 xff08 bss segment xff09 通常是指用来存放程序中 未初始化 的 全局变量 的一块内存区域 BSS是英文Block Started by Symbol的简称 BSS段属于静态内存分配 数据段 xff1a 数据段
  • C# 窗体Show和ShowDialog 方法的区别详解

    CenterParent 窗体在其父窗体中居中 CenterScreen 窗体在当前显示窗口中居中 xff0c 其尺寸在窗体大小中指定 Manual 窗体的位置由 Location 属性确定 WindowsDefaultBounds 窗体定
  • c# 窗口句柄问题 。

    1 如何获得一个窗口的句柄 xff1f 例如获取窗口PictureBox控件 xff08 其他控件也可以 xff09 的句柄 xff0c csharp view plain copy IntPtr handle 61 pictureBox
  • c#中已知一个外部窗口的句柄,怎么关闭

    已知一个外部窗口的句柄 xff0c 怎么关闭它 怎么给这个窗口的一个文本框设置内容 public void Test Handle windowhandle string TextBoxName System windws froms fr
  • 数组内存分配概念

    在这里解答一下 xff1a int arr 4 amp arr 1 61 arr 0 43 sizeof int 静态分配 xff0c 即普通数组 xff0c 由于在栈中分配 xff0c 而栈的生成方向是自高地址向低地址生成 所以有 xff
  • 静态数组和动态数组 内存分布

    数组是程序设计中是一个非常重要的概念 数组是一个用于收集大量类似数据的容器 xff0c 以及其每一个元素能被相同处理过程迭代来处理的一个抽象体 创建数组一般有三种方式 xff1a 全局 静态范围的数组 xff0c 局部变量数组 xff0c
  • C语言 内存分配 地址 指针 数组 参数 解析

    指针简介 指针式保存变量地址 的变量 增加阅读难度 指针 和 goto 语句会增加程序的理解难度 容易出现错误 ANSI C American National Standards Institute 美国国家标准学会 即标准C 通用指针类
  • C++数组与指针概念

    指向数组元素的指针 一个变量有地址 xff0c 一个数组包含若干元素 xff0c 每个数组元素都在内存中占用存储单元 xff0c 它们都有相应的地址 指针变量既然可以指向变量 xff0c 当然也可以指向数组元素 xff08 把某一元素的地址
  • [代码实例][C]Linux实现线程池

    ThreadPool h span class token macro property span class token directive keyword ifndef span THREADPOOL H span span class
  • C语言中指针的初始化和赋值

    1 指针的初始化 指针初始化时 xff0c 61 的右操作数必须为内存中数据的地址 xff0c 不可以是变量 xff0c 也不可以直接用整型地址值 但是int p 61 0 除外 xff0c 该语句表示指针为空 此时 xff0c p只是表示
  • Aspose.Cells使用总结大全

    使用到 Aspose Cells 插件 xff0c 整理一下 一 xff1a 新建解决方案 xff0c 目录如下 目录说明 xff1a Program cs 入口类 ExcelGenerator cs Aspose Cells 操作类 As
  • C#图像处理基础概念知识

    图像是人类获取和交换信息的主要来源 xff0c 因此 xff0c 图像处理的应用领域必然涉及到人类生活和工作的方方面面 随着人类活动范围的不断扩大 xff0c 图像处理的应用领域也将随之不断扩大 xff08 1 xff09 航天和航空技术方
  • c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换

    字节数组byte 与图片image之间的转化 字节数组转换成图片 span class hljs keyword style color 0088 public span span class hljs keyword style colo

随机推荐

  • C/C++ 文件操作之CreateFile、ReadFile和WriteFile

    1 CreateFile 这个函数的功能是创建或者打开一个文件或者I O设备 xff0c 通常使用的I O形式有文件 文件流 目录 物理磁盘 卷 终端流等 如执行成功 xff0c 则返回文件句柄 INVALID HANDLE VALUE 表
  • String到底是值类型还是引用类型(C#)

    MSDN 中明确指出 String 是引用类型而不是值类型 xff0c 但 String 表面上用起来却像是值类型 xff0c 这又是什么原因呢 xff1f 首先从下面这个例子入手 xff1a span class hljs comment
  • VS2013 MFC基于对话框编程(创建工程)

    一 新建MFC项目 选择 xff1a 基于对话框MFC的使用 xff1a 在共享DLL中使用MFC xff08 程序运行需要dll xff09 在静态库中使用MFC xff08 程序较大 xff0c 运行时不需要dll xff09 设置MF
  • MFC中画直线和曲线的几种方法

    一 画直线 要想在MFC中画出有颜色的线条 xff0c 首先就要设置DC的画笔 xff0c 我们可以按如下方法来设置画笔 xff1a 第一步 xff1a 在View类中添加一个COLORREF类型的数据成员m Color xff08 用来保
  • C++函数的传入参数是指针的指针(**)的详解

    要修改变量的值 xff0c 需要使用变量类型的指针作为参数或者变量的引用 如果变量是一般类型的变量 xff0c 例如int xff0c 则需要使用int 类型的指针类型int 作为参数或者int的引用类型int amp 但是如果变量类型是指
  • 零基础学习WinCE开发

    在接触WinCE时候的基础 xff1a 软件语言基础 xff1a C C 43 43 C 我不是计算机专业的 xff0c 所以这些语言基础也是比较业余的 经验不丰富 xff0c 遇到问题就是查MSDN或者到网上查找相关解决方案即可 xff0
  • SD-WAN为什么备受欢迎?

    SD WAN即软件定义广域网 xff0c 通过集中控制器 xff0c 将广阔地理范围内的计算机 云服务 数据中心集中起来统一管理 比较多地用于企业组网场景 xff0c 那么为什SD WAN如此受欢迎呢 xff1f 近年来 xff0c 企业的
  • C#实现缩放和剪裁图片的方法示例

    C 实现缩放和剪裁图片的方法 分享给大家供大家参考 xff0c 具体如下 xff1a 1 2 3 4 5 6 7 8 9 10 11
  • 虚拟内存解疑

    虚拟内存别称 虚拟存储器 xff08 Virtual Memory xff09 电脑 中所运行的 程序均需经由 内存执行 xff0c 若执行的程序占用内存很大或很多 xff0c 则会导致内存消耗殆尽 为解决该问题 xff0c Windows
  • windows内存结构概述

    13 1 Windows的虚拟地址空间安排 13 1 1虚拟地址空间的分区 xff08 即虚拟地址空间布局 xff09 进程的地址空间划分 分区 x86 32位 Windows 3GB用户模式下的x86 32位Windows X64 64位
  • 变量名和内存地址及符号表

    1 变量名是给编译器看的 xff0c 编译器根据变量是局部还是全局分配内存地址或栈空间 xff0c 所谓的变量名在内存中不存在 xff0c 操作时转换成地址数存放在寄存器中了 其实可以理解为是符号表起到了连接作用 2 符号表 xff08 此
  • C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)

    详解link 有 些人写C C 43 43 以下假定为C 43 43 程序 xff0c 对unresolved external link或者duplicated external simbol的错误信息不知所措 xff08 因为这样的错误
  • 编译器构造概述(详细)

    一 编译器简介 前面谈到静态链接器构造的基本流程 xff0c 最后提到所构造的链接器若要能正常工作的前提是需要构造一个能生成符合链接器输入文件格式的编译器 xff0c 本文构造一个符合这种具体格式要求编译器 但是编译器的直接编译的结果一般是
  • nm命令中符号类型详解

    nm命令介绍的很多 xff0c 但大多不介绍其函数符号标志的含义 最近在调试动态库时常用到 xff0c 其中用的最多的用法 nm A grep aaa c 43 43 filt A 为了显示文件 xff0c c 43 43 filt转换为可
  • 电脑怎样执行编程语言的?

    链接 xff1a https www zhihu com question 29227521 answer 154819061 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 这个问题
  • 汇编中的标号概念

    地址标号和数据标号 地址标号 1 assume cs code 2 code segment 3 a db 1 2 3 4 5 6 7 8 4 b dw 0 5 start mov si offset a 6 mov bx offset b
  • 汇编语言不带冒号标号的用法

    汇编语言中 xff0c 有一种编程方法 xff1a 直接定址表 这种方法和高级语言 xff0c C语言中的数组有类似的思想 xff0c 就是将参数编排在一起 xff0c 然后通过数组名的调用 xff0c 得到需要的数值 汇编语言中 xff0
  • 实战录 | 基于openflow协议的抓包分析

    实战录 导语 云端卫士 实战录 栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧 xff0c 希望对于关注我们的朋友有所裨益 本期分享人为云端卫士安全SDN工程师宋飞虎 xff0c 将带来基于openflow协议的抓包分析 一 什么是
  • 汇编中的标号

    当程序中要跳转到另一位置时 xff0c 需要有一个标识来指示新的位置 xff0c 这就是标号 xff0c 通过在目标地址的前面放上一个标号 xff0c 可以在指令中使用标号来代替直接使用地址 使用变量是任何编程语言都要遇到的工作 变量是计算
  • win32常用的汇编指令和寄存器

    通用寄存器 EAX 累加 Accumulator 寄存器 AX AH AL 常用于乘 除法和函数返回值 EBX 基址 Base 寄存器 BX BH BL 常做内存数据的指针 或者说常以它为基址来访问内存 ECX 计数器 Counter 寄存