Sobre el tutorial de "Creando un rootkit desde cero" by E0N, tengo una duda, o más bien dos, en cada uno de los saltos:

-El primero, en el que se pone en BufferFN para saltar a la continuación de la Api llamada por el programa principal:

DirFn=(BYTE *)GetProcAddress(GetModuleHandle("kernel32.dll"), "FindNextFileW");

BufferFN=(BYTE*)malloc(12); //Rservamos 12 bytes de memoria, 7 para el inicio de la Api y 5 para el JMP y la dirección del salto
...
memcpy(BufferFN,DirFn,7);
Buffer+=7;

*BufferFN=0xE9;
BufferFN++;

//Aquí viene la duda
*((signed int*)BufferFN)=DirFn-BufferFN+3;

Y la otra viene en la dirección del salto a la función hookeadora:
*((signed int*)DirFn)=DirYoFn-DirFn-4;
donde DirYoFn es la dirección de la función hookeadora

Mi pregunta es: ¿por qué depende el primer salto del puntero BufferFN, y en el segundo se depende de DirFN? ?Por qué no se salta directamente a DirFN o se salta directamente a la dirección de la función hookeadora, en vez de hacer esas operaciones?

Gracias, un saludo!