Storing register values from a hook in assembly/c++ and save to array

Viewed 173

I'm trying to make a hook that takes the rdi from a function and stores it in an array. I know how to do it using inline assembly as by the code example:

...

uintptr_t objStart = 0x0;
uintptr_t jmpBack = 0x0;
Ent* ents[255];
Ent* entsptr;

void hook()
{
    __asm {
        movss xmm10, [rdi + 0x54]
        movss xmm11, [rdi + 0x58]
        mov EntityObjStart, rdi
        push rax
        push rcx
        push rdx
        push rbx
        push rsp
        push rbp
        push rsi
        push rdi
    }
    __asm {
        mov rax, ObjStart
        mov[entsptr], rax
    }

...
    for (int i = 0; i < 254; i++)
    {
        if (ents[i] == 0)
        {
            ents[i] = entsptr;
            break;
        }
    }
...

Sadly this won't work because MSVS doesn't support inline assembly for 64 bit. I tried doing a separate asm file and link that together with the project, which works, but I don't know how to pass in the pointers to the assembly file or get the RDI out so I can store it in the array...

If you guys have any suggestions, that would be amazing!

0 Answers
Related