打印

字符指针问题

[复制链接]
1046|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pkat|  楼主 | 2013-12-31 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
if(CWeapon* Weapon = GetWeaponByIndex(pEntity.nWeaponID))//读取当前ID的武器名称
{
const char* EnemyWeaponName = Weapon->WName;
if(MyTeam == pInfo.iTeam)
{
Render.DrawString(ScreenX+5, ScreenY-25, D3DCOLOR_ARGB(255, 0, 255, 0), D3D.Font, EnemyWeaponName);
}
else
{
Render.DrawString(ScreenX+5, ScreenY-25, D3DCOLOR_ARGB(255, 255, 0, 0), D3D.Font, EnemyWeaponName);
}
下面的是子程序 读取index的武器名称并返回pweapon
CWeapon* GetWeaponByIndex( int Index )//武器名称
{
    CWeapon* pWeapon = (CWeapon*)((DWORD)0x748658 + Index * WeaponSize);
    return pWeapon;
}
下面的是类
class CWeapon
{
public:
    char unknown0[4];
    CWeaponInfo* WeaponInfo; //0004
    char unknown2[48];
    char* WName; //0038
};
时钟执行以上代码 一开启显示名称没一会就软件异常
改成char WName[1024];之后 直接显示乱码但不异常了 我郁闷

相关帖子

沙发
火箭球迷| | 2013-12-31 20:34 | 只看该作者
if(CWeapon* Weapon = GetWeaponByIndex(pEntity.nWeaponID))//读取当前ID的武器名称

为什么要写这种代码。

使用特权

评论回复
板凳
sinadz| | 2013-12-31 20:48 | 只看该作者
这个wName使用的空间是从堆上分配出来的,还是栈上的某个临时变量?

使用特权

评论回复
地板
无冕之王| | 2013-12-31 20:56 | 只看该作者
整个程序没有问题,至少你放在这里的这3段代码没有问题。
通过以下方法查。
1. 请加个断点,查看一下0x748658+56的内容,如果那个地址是0号武器的名称,那你的struct中的WName就必须定义为数组,如果是一个地址,而从这个地址可以循址到0号武器的名称,那struct不用改。如果还没有找到0号武器名称,那说明0x748658是错的,或CWeapon的结构你反向分析错了。
2. 如果以上问题解决后,用以上方法分析0x748658+56+WeaponSize位置的内容,可以判断WeaponSize的值是否有问题。

反向分析的基本功,呵呵。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2726

帖子

0

粉丝