郁金香初级班 5/16 10-15
目录:
11 - 12 .c/c++内存读写接口函数
13.0X86环境使用汇编MOV,SUB,ADD指令
14.X64使用汇编环境
15.push和pop指令与栈的关系
目录:
11 - 12 .c/c++内存读写接口函数
#include"4字节读写接口.h" int R4(UINT_PTR 内存地址) { /// uintptr_t能够存储指针的无符号整数类型。 HWND 窗口句柄 = FindWindowA("MainWindow", "植物大战僵尸中文版"); printf("窗口句柄 h=%p 行号=%d\r\n", 窗口句柄, __LINE__); DWORD PID = 0, TID = 0; TID = GetWindowThreadProcessId(窗口句柄, &PID); HANDLE 进程句柄 = OpenProcess(PROCESS_ALL_ACCESS, 0, PID); unsigned int 返回值 = 0; ReadProcessMemory(进程句柄, (LPCVOID)内存地址, &返回值, 4, 0); return 返回值; } void 写入(UINT_PTR 内存地址, int 阳光值) { HWND 窗口句柄 = FindWindowA("MainWindow", "植物大战僵尸中文版"); DWORD PID = 0, TID = 0; TID = GetWindowThreadProcessId(窗口句柄, &PID); HANDLE 进程句柄 = OpenProcess(PROCESS_ALL_ACCESS, 0, PID); unsigned int 返回值 = 0; WriteProcessMemory(进程句柄, (LPVOID)内存地址, &阳光值, 4, 0); }
#pragma once #include<stdio.h> #include<Windows.h> int R4(UINT_PTR 内存地址); void 写入(UINT_PTR 内存地址, int 阳光值);
13.0X86环境使用汇编MOV,SUB,ADD指令
5: ////int a = 1; mov dword ptr [a],1 6: 7: _asm 8: { 9: ////mov a, 0x123; mov dword ptr [a],123h 10: 11: 12: 13: } 14: printf("%x", a); //当你输入asm后 直接插入了你的汇编(编译器会做处理 比如变量a的定位)
14.X64使用汇编环境
第一步:
在项目上点右键->生成依赖项->生成自定义->masm
.code
mycall proc
mov rax,1111122h
ret
mycall endp
mycall2 proc
mov rax,1111122h
ret
mycall2 endp
end
main函数
#include<stdio.h> #include<Windows.h> #include <iostream> extern "C" UINT64 mycall(); //函数的说明 extern "C" UINT64 mycall2(); //函数的说明 int main() { int a = 1; printf("%x", mycall()); printf("%x", mycall2()); return 0; }
寄存器是8字节
15.push和pop指令与栈的关系
了解栈的概念
了解push指令
了解pop指令
了解esp/rsp栈顶指针
扩展知识点:了解ebp/rbp栈底指针
扩展知识点:了解静态变量与全局变量,局部变量的存放方式
push指令:push 1
sub esp.4
mov [esp],1(简写)
pop指令: 简称出栈指令 pop ebx
mov ebx,[esp]
add esp,4

浙公网安备 33010602011771号