能力值:
( LV2,RANK:10 )
|
-
-
2 楼
建议往里点直接调用InternalCall,里面的InternalCall是标准的调用约定,无非就是多写几个参数
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
我的小拇指啊
建议往里点直接调用InternalCall,里面的InternalCall是标准的调用约定,无非就是多写几个参数
参数多到不想分析
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
逆向爱好者
参数多到不想分析
那你可以定义个参数结构体,把数据对齐好,然后用QWORD读出来按顺序传入,或者用汇编跟mono invoke
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
struct vec3
{
float x, y, z;
};
struct linecast_param
{
vec3 beg;
int pad_0;
vec3 end;
int pad_1;
}
void* linecast_address;
void linecast(const vec3& beg, const vec3& end)
{
linecast_param param = {};
param.beg = beg;
param.end = end;
QWORD* data = (QWORD*)¶m;
RaycastHit hitInfo = {};
int layerMask = -1
// public static bool Linecast(Vector3 start, Vector3 end, out RaycastHit hitInfo, int layerMask)
((void(*)(...))linecast_address)(&hitinfo, layerMask, 0, 0, data[0], data[1], data[2], data[3]);
} 我记得顺序好像是这样的,具体你得调试看看,我以前就是这么直接调用的。 这种调用约定好像只有unity 5.6有,之后的版本结构体都是传指针了
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
我的小拇指啊
那你可以定义个参数结构体,把数据对齐好,然后用QWORD读出来按顺序传入,或者用汇编跟mono invoke
我扣汇编调用这个call,在主线程调用也崩溃,我调试了崩溃指令就是向堆栈写入了xmm6后就崩溃了,然后我就分配0x10对齐的堆栈再调用,然后其他地方又蹦了…………
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
我的小拇指啊
struct vec3
{
float x, y, z;
};
struct linecast_ ...
这个LineCast封装了好多………
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
我感觉是不行的………我目前解决办法就是调用外面的call,那个call只有本人实体和对象实体 。
|
|
|