地址: 对变量取地址使用“&”符号
指针: TYPE * 定义指针,TYPE为数据类型
引用: TYPE & 定义引用,TYPE为数据类型
13 int nVar = 0x12345678;
mov dword ptr ss:[ebp-C],12345678
14 int *pnVar = &nVar;
lea eax,dword ptr ss:[ebp-C]
mov dword ptr ss:[ebp-18],eax //直接将地址存入内存
15 char *pcVar = (char*)&nVar;
lea eax,dword ptr ss:[ebp-C]
mov dword ptr ss:[ebp-24],eax
16 short *psnVar = (short*)&nVar;
lea eax,dword ptr ss:[ebp-C]
mov dword ptr ss:[ebp-30],eax
18 printf("Justin: %08x \r\n", *pnVar);
19 printf("Justin: %08x \r\n", *pcVar);
20 printf("Justin: %08x \r\n", *psnVar);
23 char cVar[5] = {0x01, 0x23, 0x45, 0x67, 0x89};
mov byte ptr ss:[ebp-40],1
mov byte ptr ss:[ebp-3F],23
mov byte ptr ss:[ebp-3E],45
mov byte ptr ss:[ebp-3D],67
mov byte ptr ss:[ebp-3C],89
24 int *pnVar1 = (int*)cVar;
lea eax,dword ptr ss:[ebp-40]
mov dword ptr ss:[ebp-4C],eax
25 char *pcVar1 = (char*)cVar;
lea eax,dword ptr ss:[ebp-40]
mov dword ptr ss:[ebp-58],eax
26 short *psnVar1 = (short*)cVar;
lea eax,dword ptr ss:[ebp-40]
mov dword ptr ss:[ebp-64],eax
27 pnVar1 += 1;
mov eax,dword ptr ss:[ebp-4C]
add eax,4 //int 指针 4 位
mov dword ptr ss:[ebp-4C],eax
28 pcVar1 += 1;
mov eax,dword ptr ss:[ebp-58]
add eax,1 //char 指针 1位
mov dword ptr ss:[ebp-58],eax
29 psnVar1 += 1;
mov eax,dword ptr ss:[ebp-64]
add eax,2 //short指针 2位
mov dword ptr ss:[ebp-64],eax
32 int &nVarType = nVar;
lea eax,dword ptr ss:[ebp-C]
mov dword ptr ss:[ebp-70],eax
33 Add(nVar);
lea eax,dword ptr ss:[ebp-C]
push eax
call addressandpointerref.A11320
add esp,4
void Add(int &nVar) {
nVar++;
mov eax,dword ptr ss:[ebp+8] //堆栈寄存器,获取函数调用前push的地址
mov ecx,dword ptr ds:[eax] //数据段寄存器
add ecx,1
mov edx,dword ptr ss:[ebp+8]
mov dword ptr ds:[edx],ecx
}
AH&AL=AX(accumulator):累加寄存器
BH&BL=BX(base):基址寄存器
CH&CL=CX(count):计数寄存器
DH&DL=DX(data):数据寄存器
SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基址指针寄存器
SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器
IP(Instruction Pointer):指令指针寄存器
CS(Code Segment)代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器
OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.
SF sign Flag 符号标志 记录运算结果的符号,结果负时为1.
ZF zero flag 零标志 运算结果等于0时为1,否则为0.
CF carry flag 进位标志 最高有效位产生进位时为1,否则为0.
AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.
PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.
DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
TF trap flag 陷阱标志 用于调试单步操作.