关于内联汇编的问题.请高人指点

黑衣 2013-06-10 11:16:37
const int BaseAddress = 0x0A4A4900
void GetItemCount(int ItemLocation){
int ItemCount = 0;
int ItemAddress = ItemLocation*4
_asm{
mov eax,BaseAddress
mov eax,[eax] ----->这里直接报内存冲突
add eax,ItemAddress
add eax,0x34F
mov eax,[eax]
mov ItemCount,eax
}
}
...全文
137 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑衣 2013-06-12
  • 打赏
  • 举报
回复
也就是说我在非本程序内执行了该函数调用后.我根本没有权限 例如.我自己的程序.A.exe 动态库 B.dll 游戏是C.exe 首先A.exe调用注入 B.dll->C.exe 这时候B.dll动态库执行任何内部函数都具有C.exe本身的权限和内存操作范围 而A.exe调用B.dll函数 然后B.dll调用函数. 但是A相对于C并没有算是内部.而算是远程调用. 所以才会产生内存越界.对么. 念书少.粗俗理解.对付看.
黑衣 2013-06-11
  • 打赏
  • 举报
回复
dll已经注入了. 但是就是没结果
黑衣 2013-06-11
  • 打赏
  • 举报
回复
temp.Format("%d",Blood); 少写了一个d
黑衣 2013-06-11
  • 打赏
  • 举报
回复
我又重写了一份.
// TorchlightGameDll.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "TorchlightGameDll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
//		则从此 DLL 导出的任何调入
//		MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//		该函数的最前面。
//
//		例如:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// 此处为普通函数体
//		}
//
//		此宏先于任何 MFC 调用
//		出现在每个函数中十分重要。这意味着
//		它必须作为函数中的第一个语句
//		出现,甚至先于所有对象变量声明,
//		这是因为它们的构造函数可能生成 MFC
//		DLL 调用。
//
//		有关其他详细信息,
//		请参阅 MFC 技术说明 33 和 58。
//

// CTorchlightGameDllApp

BEGIN_MESSAGE_MAP(CTorchlightGameDllApp, CWinApp)
END_MESSAGE_MAP()


// CTorchlightGameDllApp 构造

CTorchlightGameDllApp::CTorchlightGameDllApp()
{
	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CTorchlightGameDllApp 对象

CTorchlightGameDllApp theApp;


// CTorchlightGameDllApp 初始化

BOOL CTorchlightGameDllApp::InitInstance()
{
	CWinApp::InitInstance();

	return TRUE;
}



const CString GameName = "Torchlight II v.1.25.2.2";
const CString GameDllName = "TorchlightGameDll.dll";
const int BloodBaseAddress = 0x0018C8BC;
LRESULT CALLBACK GameProc(int code,WPARAM wParam,LPARAM lParam){
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return CallNextHookEx(0,code,wParam,lParam);
}
void __declspec(dllexport) SetHook(){
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	//获取游戏主线程ID
	HWND GameHwnd = ::FindWindow(NULL,GameName);
	if(GameHwnd!=NULL){
		AfxMessageBox("注入成功");
		DWORD GameDword=::GetWindowThreadProcessId(GameHwnd,NULL);
		//获取游戏主线程句柄
		::SetWindowsHookEx(WH_KEYBOARD,&GameProc,::GetModuleHandle(GameDllName),GameDword);
		AfxMessageBox("注入成功");
	}else{
		AfxMessageBox("未找到游戏");
	}

}
int __declspec(dllexport) GetItem(){
	return 0;
}
int __declspec(dllexport) GetBlood(){
	CFile file ;

	int Blood =0;
	_asm{
		mov eax,BloodBaseAddress
		mov eax,[eax]
		add eax,0xC90
		mov Blood,eax
	}
	file.Open("d:\\log.txt",CFile::modeReadWrite);
	CString temp ;
	temp.Format("%",Blood);
	file.Write(temp,temp.GetLength());
	file.Close();
	return Blood;
}
这是我程序

__declspec(dllimport) void SetHook();
__declspec(dllimport) int GetBlood();

void CTorchlightGameDlg::OnBnClickedBtnReadBlood()
{
	// TODO: 在此添加控件通知处理程序代码
	
	int Blood = GetBlood();
	CString temp ;
	temp.Format("%d",Blood);
	AfxMessageBox(temp);
}


void CTorchlightGameDlg::OnBnClickedBtnHook()
{
	SetHook();
}


不报错了.但是读不出来数值
  • 打赏
  • 举报
回复
实在没有答案,就上看雪论坛吧....
黑衣 2013-06-11
  • 打赏
  • 举报
回复
Edp已经关上了.只为window 基础提供保护
  • 打赏
  • 举报
回复
把你写的这个有冲突的程序,再用OD跟一下试试
  • 打赏
  • 举报
回复
把你电脑的DEP关上试试
黑衣 2013-06-11
  • 打赏
  • 举报
回复
需要什么选权限吗?我注入到游戏里面了.
  • 打赏
  • 举报
回复
是不是没有权限
黑衣 2013-06-11
  • 打赏
  • 举报
回复
自己顶一下有高人帮帮忙
黑衣 2013-06-11
  • 打赏
  • 举报
回复
自己顶一下有高人帮帮忙
schlafenhamster 2013-06-11
  • 打赏
  • 举报
回复
“CE找出来的”地址是 没用的, 与程序 load 到哪里 有关
黑衣 2013-06-10
  • 打赏
  • 举报
回复
没有越界呀.我是CE找出来的.在OD里已经测试过的了.都有数据的.
zwfgdlc 2013-06-10
  • 打赏
  • 举报
回复
0x0A4A4900指向的内存越界了

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧