Here, we found an interesting string that will help us to get a starting point.
You could also instead search for D3D API calls but since the IAT of my dump is destroyed and I don't want to fix it, I can't do that.
We are going to trace the string back to a code reference, to see where it
is used, and how.
Now we need to use logic - there is a conditional jump before our error,
which is the only one that will jump about our error message. Soo...
The only possible solution is ebp+var_44. ebp, which everyone should be clear, is btw. the stack ptr which is mostly used in functions instead of esp.
If var_44 is equal to zero, then a specific flag in the cpu will be set. If not it will give us a value that will indicate that it is bigger or smaller. 'jz' only checks the equality flag. Assuming it's equal it will jump, we now know that var_44 must be a variable that can say something about our state of the D3D font.
Tracing var_44 back, we can realize that it is set from eax, which is also set in the call before.
This call brings us to a jump which will jump to a probably DirectX DLL in which the function gets called. Since I didn't rebuild the IAT(hence, it's destroyed) it's not displayed as D3DXCreateFont(probably).
What does that mean to us?
To validate it's correct, you could hook this function and manipulate the value of the local var and see what S4 does. With this information you can simply grab the font ptr.
It's the same play with all other modules of the D3D pipeline.
Just find an error string inside of the exe and trace it back.
You can also try to find cross references and see if you can find a static ptr.
That'd be the best case.