Hello Ownedcore!
I have some problem with getting asm execute result of getting TraceLine, the code seems to be correct but i have error on reading result:
Code:
public static bool TraceLine(Vector3 start, Vector3 end, uint flags)
{
uint tracelineCodecave = BlackMagic.AllocateMemory(40);
try
{
Console.WriteLine("start: " + start);
Console.WriteLine("end: " + end);
Console.WriteLine("flags: " + flags);
IntPtr distancePointer = (IntPtr)tracelineCodecave;
IntPtr startPointer = IntPtr.Add(distancePointer, 0x4);
IntPtr endPointer = IntPtr.Add(startPointer, 0xC);
IntPtr resultPointer = IntPtr.Add(endPointer, 0xC);
Console.WriteLine("distancePointer: " + distancePointer);
Console.WriteLine("startPointer: " + startPointer);
Console.WriteLine("endPointer: " + endPointer);
Console.WriteLine("resultPointer: " + resultPointer);
{
string[] asm = new string[]
{
"PUSH 0",
$"PUSH {flags}",
$"PUSH {distancePointer}",
$"PUSH {resultPointer}",
$"PUSH {endPointer}",
$"PUSH {startPointer}",
$"CALL {World.TraceLine}",
"ADD ESP, 0x18",
"RETN",
};
byte[] returnBytes = Hook.InjectAndExecute(asm, true, out bool suc);
bool ret = BlackMagic.ReadInt((uint)resultPointer) > 0;
Console.WriteLine("InjectAndExecute suc: " + suc);
Console.WriteLine("ret: " + ret);
Console.WriteLine("returnBytes: " + returnBytes);
return ret;
}
}
finally
{
BlackMagic.FreeMemory(tracelineCodecave);
}
return false;
}
Code:
Vector3 start = new Vector3(pX, pY, pZ);
Vector3 end = new Vector3(kX, kY, kZ);
Func.TraceLine(start, end, 0x00100171);
From console:
Code:
start: <-9086,989* 354,253* 93,28503>
end: <-9101,831* 349,9462* 93,14945>
flags: 1048945
distancePointer: 367853568
startPointer: 367853572
endPointer: 367853584
resultPointer: 367853596
returnAdress:367591424
dwAddress:28672
Tried to fixed it but without success. I would appreciate any hint.