郁金香初级班 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);
    


}
读写接口.c
#pragma once
#include<stdio.h>
#include<Windows.h>
int R4(UINT_PTR 内存地址);
void 写入(UINT_PTR 内存地址, int 阳光值);
读写接口.h

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
.asm

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;

}
View Code

寄存器是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

 

 

 

 

posted @ 2023-05-16 15:23  大橘|博客  阅读(36)  评论(0)    收藏  举报