vb6.0 __stdcall函数内调用__cdecl函数_mingw版
//dy.c
#include <windows.h>
//C声明:
//int __stdcall dy(void * bdhsdz, int cssz[], int csgs);
//第一个参数:被调函数地址,第二个参数:参数数组,第三个参数:参数个数.
//dy(fp,0,0)表示无参函数调用.
//dy支持有返回值函数调用和无返回值函数调用.
//被调函数的返回值是dy的返回值.
__declspec(dllexport) int __declspec(naked) __stdcall dy(void *bdhsdz, int cssz[], int csgs) {
__asm__
("\
pushl %ebp;\
movl %esp,%ebp;\
pushl %ebx;\
movl %ss:0x0C(%ebp),%ebx;\
movl %ss:0x10(%ebp),%eax;\
decl %eax;\
bqq: cmpl $0x0,%eax;\
jl bqh;\
pushl %ds:(%ebx,%eax,0x4);\
decl %eax;\
jmp bqq;\
bqh: call *%ss:0x8(%ebp);\
movl %eax,%ebx;\
movl $0x4,%eax;\
imull %ss:0x10(%ebp);\
addl %eax,%esp;\
movl %ebx,%eax;\
popl %ebx;\
leave;\
ret $0xC\
");
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}
编译成dll:
gcc -m32 -static -Wall dy.c -s -O2 -Wl,--kill-at -mdll -o dy.dll
dy.dll静态分析:
调用测试:
//main.c
#include <stdio.h>
#include <stdlib.h>
int __stdcall dy(void * bdhsdz, int cssz[], int csgs);
int a[2];
int main(void)
{
a[0] = (int)"hello%d\n";
a[1] = 123;
printf("%d\n", dy(printf, a, 2));
system("pause");
return 0;
}
gcc main.c -static -s -m32 -Wall -o main.exe -O2 dy.dll
main.exe运行效果
hello123
9
请按任意键继续. . .
vb6.0 __stdcall函数内调用__cdecl函数_mingw版相关推荐
- javascript嵌套函数和在函数内调用外部函数的区别
我们都知道在函数中定义的局部变量在声明他的函数体以及其嵌套的函数内始终是有定义的,并且在函数的作用域链上始终会有个对象指向全局对象,使函数能够访问到全局变量. var ga = 'global'; v ...
- vue函数如何调用其他函数?_好程序员Python教程系列之递归函数与匿名函数调用...
好程序员Python教程系列递归函数与匿名函数调用,函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名函数两种函数 ...
- mysql编写函数 求1 n 偶数之和,编写求1 2 3 - n的函数.在main函数中调用该函数
输入两个正整数m,n,编写求阶乘的函数,计算m!/(n!*(m-n)!). C语言函数解答,谢谢. #includelongfactorial(intm,intn){longsum=1,sum1=1; ...
- vue函数如何调用其他函数?_C语言函数学习-函数的嵌套调用
文章logo 函数的嵌套调用 C语言中不允许作嵌套的函数定义.因此各函数之间是平行的,不存在上一级函数和下一级函数的问题.但是C语言允许在一个函数的定义中出现对另一个函数的调用.这样就出现了函数的嵌套 ...
- C语言编程>第六周 ① 编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中。 在主函数中调用该函数计算出这n个整数之和。
例题:编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中. 在主函数中调用该函数计算出这n个整数之和. 代码如下: /*代码分析:录入函数需要两个参数:一个参数是需要用来存储数字的数组, ...
- C语言:自定义函数中调用自定义函数的方法
自定义函数中调用自定义函数 在我们编写C语言程序时,可以将要经常用到的或者有自己单独作用的那一部分代码独立成一个函数,不仅可以简化我们的程序,还可以使我们的程序更加可见话. 正文阿巴阿巴 方法一:直接 ...
- matlab子函数相互调用吗,matlab主函数如何调用子函数
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2021/03/18 18:00:53 matlab主函数如何调用子函数 我编写了一个matlab子函数是关于龙格库塔计算的 主函数内容为: fo ...
- python封装一个函数并调用_python - 函数的封装与调用
一.函数的定义,函数名,函数体以及函数的调用 1.函数的定义语法: def 函数名(): 函数体 2.函数名的定义与变量名命名一样 3.函数的封装与调用 #函数的封装 defyue():print(' ...
- 类的成员函数指针和静态成员函数指针 调用成员函数***
C++提供static这个关键词对静态成员进行声明,静态成员函数和类的实例化无关,对于同一类来说,静态成员函数是所有类的对象共享的.而普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是 ...
最新文章
- 关于Synchronized研伸扩展
- 中国中老年化妆品行业消费需求现状与产销规模前景展望报告2022年
- Java 算法 开心的金明
- python画矩阵图_Python根据已知邻接矩阵绘制无向图操作示例
- Linux常用命令及笔记
- 地下迷宫探索 (30 分)(DFS)
- 自制VBS自动刷屏器,再也不怕刷屏刷不过别人了
- 计算机自动关机命令,电脑自动关机命令是什么?你都知道吗?
- 奇妙软件3趋势破解代码
- Android ROS开发环境搭建
- 企业内网信息安全实践-记ChinaUnix技术交流
- WP Engine开发人员工具的好处
- 《精进:如何成为一个很厉害的人》读后感
- IO流-常用的IO流总结
- jmap命令(Java Memory Map)
- Spline导数及曲率计算
- 如何将背景图改为透明(透明就是我们看到的方格图)
- 简单的jsp代码 简易聊天室(登录,发送信息,退出)
- php+仿微信发红包+负数,php仿微信红包分配算法的实现方法
- 增广拉格朗日乘子法(Augmented Lagrange Method)