nasm aat函数 x86
xxx.asm:
%define p1 ebp+8
%define p2 ebp+12
%define p3 ebp+16
section .text
global dllmain
dllmain:
mov eax,1
ret 12
aat:
push ebp
mov ebp,esp
; 函数必须保留所有寄存器,但eax,ecx和edx除外
; esp则必须根据调用约定进行更新
mov ecx,[p1] ; array ptr
mov edx,[p2] ; index
mov eax,[p3] ; size
mul edx ; eax=eax*edx
lea eax,[ecx+eax]
mov esp,ebp
pop ebp
ret 12
c++:
#include <iostream>
#include <Windows.h>
typedef PVOID (CALLBACK* aat_t)(PVOID pArray, size_t index, size_t size);
aat_t aat;
struct Player
{
size_t id;
DWORD hp;
DWORD mp;
};
int main()
{
HMODULE myDLL = LoadLibraryA("xxx.dll");
aat = (aat_t)GetProcAddress(myDLL, "aat");
int a[] = { 1,2,3 };
printf("%d\n", *(int*)aat(a, 2, sizeof(int))); // 3
Player b[] = {
Player{1, 10, 20},
Player{2, 50, 60},
Player{3, 90, 20},
};
Player* it = (Player*)aat(b, 0, sizeof(Player));
printf("[%d]: %d %d\n", it->id, it->hp, it->mp); // [1]: 10 20
it = (Player*)aat(b, 1, sizeof(Player));
printf("[%d]: %d %d\n", it->id, it->hp, it->mp); // [2]: 50 60
it = (Player*)aat(b, 2, sizeof(Player));
printf("[%d]: %d %d\n", it->id, it->hp, it->mp); // [3]: 90 20
return 0;
}
nasm aat函数 x86的更多相关文章
- nasm astrspn函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- nasm astrcspn函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- nasm astrchr函数 x86
xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ...
- nasm astrlen函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- nasm astrstr函数 x86
xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ...
- nasm astrset_s函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- nasm astrrev函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- nasm astrrchr函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- nasm astrncmp函数 x86
xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ...
随机推荐
- CSS开发过程中的20个快速提升技巧
摘要:本文涵盖了20个CSS技巧,可以解决许多工作中常见的问题, 让你也成为一个CSS高手. 1.使用CSS重置(reset) css重置库如normalize.css已经被使用很多年了,它们可以为你 ...
- SDNUOJ1016矩形合并
传送门 题意: 给出n个矩形,把重合的矩形归成一个图形,问合并以后剩下几个图形 思路: 我开始想用dfs,但是发现不太行. 后来知道才是并查集 Orz 用一个结构体数组存矩形的左下角和右上角的坐标,再 ...
- for循环语句学习
for循环又称为遍历循环,从名字就可以知道,它用于对象的遍历 语法格式: 会从可迭代对象对象中依次拿出值来赋值给变量,变量的值每次都会被修改 for 变量1[变量2...] in 可迭代对象: 代码块 ...
- VScode 连接虚拟机
VScode 连接虚拟机 在VScode上面使用SSH连接虚拟机,编写代码以及运行都将会方便许多 打开VScode,安装Remote-SSH插件 配置SSH连接信息 点击左侧第四个图标,然后单击设置按 ...
- Educational Codeforces Round 21
Educational Codeforces Round 21 A. Lucky Year 个位数直接输出\(1\) 否则,假设\(n\)十进制最高位的值为\(s\),答案就是\(s-(n\mod ...
- c语言实现n!算法
最近一面学习数据结构,一面在做些c语言的题目.这个题目前些天碰到,和同学讨论了下.于是就用c语言实现n!(n=10000) 1 #include<stdio.h> 2 #define MA ...
- Toxophily HDU - 2298 三分+二分
代码+解析: 1 //题意: 2 //有一个大炮在(0,0)位置,为你可不可以把炮弹射到(x,y)这个位置 3 //题目给你炮弹初始速度,让你求能不能找出来一个炮弹射出时角度满足题意 4 //题解: ...
- 踏上Revit二次开发之路 0 序
0 序 近来,由于工作上的需要,开始自学Revit二次开发. Revit由欧特克公司专为BIM构建,是建筑业体系中使用最广泛的软件之一.借助欧特克公司在我国市场占有率方面的绝对优势,甚至给不少人带来& ...
- Kubernets二进制安装(14)之flannel之SNAT规则优化
flannel之SNAT规则优化的目的是由于在K8S中的容器内,访问不同宿主机中的容器的资源的时候,日志文件会记录为宿主机的IP地址,而不是记录为容器本身自己的IP地址,建议在不同的宿主机上的容器互访 ...
- LINUX - 随机数
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...