网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月29日漏签0天
c++吧 关注:616,794贴子:2,111,156
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 3回复贴,共1页
<<返回c++吧
>0< 加载中...

小程序

  • 只看楼主
  • 收藏

  • 回复
  • CIW_BLUE
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
无聊的时候写的程序,很难用,但是功能很多,多到你想不到.
语法:
1. API格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]
2. 字符串格式:s + 字符串
3. 数值:i + 数值
4. 开辟空间: n (100B)
5. 引用返回值:r + 第n个(n<1000)
6. C调用函数前要加c(进行堆栈恢复)


#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;

struct stApi
{
char szApi[100];
};

vector<stApi> cApiVec;
DWORD lpRetAddress = 0;
int nRetNum = 0;
DWORD dwRetValue[1000];

void ApiText(char *lpszApi)
{
int nLen = strlen(lpszApi);
stApi stApi1;
for( int i = 0, j = 0; i < nLen; i++){
if( lpszApi[i] != ' '){
stApi1.szApi[j++] = lpszApi[i];
}
else{
stApi1.szApi[j] = 0;
cApiVec.push_back(stApi1);
memset(stApi1.szApi, 0, 100);
j = 0;
}
}
}

void ApiPF()
{
int nStrNum = 0;
char *lpStr[100] = {NULL};
int nStatckSize = (cApiVec.size() - 2) << 2;
vector<stApi>::iterator iterend = cApiVec.end();
vector<stApi>::iterator iterbegin = cApiVec.begin();
DWORD lpAddress = 0;

HMODULE hModule = LoadLibrary(iterbegin[0].szApi);
if( cApiVec[1].szApi[0] == 'c' ){
lpAddress = (DWORD)GetProcAddress(hModule, &cApiVec[1].szApi[1]);
}
else
lpAddress = (DWORD)GetProcAddress(hModule, cApiVec[1].szApi);

if( !lpAddress ){
cout<< "找不到你要的API." <<endl <<endl;
return ;
}

iterbegin++;

for(  --iterend; iterend != iterbegin ; iterend--){

if( iterend->szApi[0] == 's' ){
DWORD lpParamAddress = (DWORD)&iterend->szApi[1];
__asm
{
push lpParamAddress
}
}
else if( iterend->szApi[0] == 'i')
{
long n = atol(&iterend->szApi[1]);
_asm
{
push n
}
}
else if( iterend->szApi[0] == 'n' ){
lpStr[nStrNum] = new char[100];
char *lpAddr = lpStr[nStrNum];
_asm
{
push lpAddr
}

nStrNum++;
}
else if( iterend->szApi[0] == 'r' )
{
char szText[100];
strcpy(szText, &iterend->szApi[1]);
int n = atoi(szText);
if( n >= nRetNum ){
cout<< "找不到传递的返回值." <<endl;
return ;
}
DWORD dwValue = dwRetValue[n];
_asm
{
push dwValue
}
}

}

_asm
{
call lpAddress
mov lpRetAddress, eax
}

if( cApiVec[1].szApi[0] == 'c' ){
_asm
{
add esp, nStatckSize
}
}

FreeLibrary( hModule );


if( lpStr ){
cout<< endl <<"--------------执行结果-----------------" <<endl <<endl;
if( nStrNum > 0 ){
for(int i = 0; i < nStrNum; i++){
cout<<"第" << i + 1 << "个" << "新开辟的空间的地址为:  "<< (int*)lpStr[i] <<endl;
cout<<"第" << i + 1 << "个" << "新开辟的空间的值为:  "<< lpStr[i] <<endl;
}
}
cout<< cApiVec[1].szApi <<  "返回了:  " << lpRetAddress << "   ,以后可以用:  r"<< nRetNum << "   引用它." <<endl ;
dwRetValue[nRetNum++] = lpRetAddress;

cout<< "---------------------------------------" <<endl<<endl;
for(int i = 0; i < nStrNum; i++)
delete[] lpStr[i];
}
}
int main()
{
char szApi[100];

while(1)
{
cout<< "输入API,格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]" <<endl;
cin.getline(szApi, 100);
strcat(szApi, " ");
ApiText(szApi);
ApiPF();
cApiVec.clear();
}

return 0;
}


  • CIW_BLUE
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
某次运行结果(@!@¥%……&*,什么东西啊~~~~):

输入API,格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]
user32.dll GetForegroundWindow

--------------执行结果-----------------

GetForegroundWindow返回了: 3146100 ,以后可以用: r0 引用它.
---------------------------------------

输入API,格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]
user32.dll GetWindowTextA r0 n i100

--------------执行结果-----------------

第1个新开辟的空间的地址为: 003708B8
第1个新开辟的空间的值为: C:\App.exe
GetWindowTextA返回了: 10 ,以后可以用: r1 引用它.
---------------------------------------

输入API,格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]
kernel32.dll DeleteFileA sc:\1.txt

--------------执行结果-----------------

DeleteFileA返回了: 1 ,以后可以用: r2 引用它.
---------------------------------------

输入API,格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]
msvcrt.dll cprintf sHelloWorld
HelloWorld
--------------执行结果-----------------

cprintf返回了: 10 ,以后可以用: r3 引用它.
---------------------------------------

输入API,格式:[动态库] [函数名(c调用请在前面加c)] [参数1,参数2,...]


2025-05-29 02:03:01
广告
  • 四点了哇
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
……
牛人!!
好!!!=.=|||


  • sharpwei
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数据结构学习群 有兴趣者欢迎加入66301523


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示