urbanyoung Posted July 16, 2009 Posted July 16, 2009 Hey,I'm trying to call a c++ class member function through asm. I believe the this param (class id) is passed using ECX in the function call, getting this is no problem. However, when I call the function (with the class id in ECX) the function doesn't crash like before, but it returns incorrect data. I was wondering if anything else needs to be passed to the function or if ECX is infact the class id used to associate data with the caller. Any tips would be appreciated.
mudlord Posted July 19, 2009 Posted July 19, 2009 http://msdn.microsoft.com/en-us/library/bdd5392d.aspxNot sure if your doing fully fledged ASM or just intrinsics.
atom0s Posted July 19, 2009 Posted July 19, 2009 If you are getting incorrect data, make sure your params are correct and that you are passing the proper pointer into ECX. As mudlord said, you can do inline ASM inside of C++ using _asm / __asm tags. For calling a class member function something on the line of this should work:_asm { push param3 push param2 push param1 lea ECX, [class_ptr] call member_ptr}I'm not great with ASM so don't rely on that to work as I can only give you my assumption. Class calls in C++ internally are done as:result class::function( class_ptr, param1, param2, param3, ... )Some good reads about some of this topic:/>http://www.codeguru.com/cpp/misc/misc/assemblylanguage/article.php/c14641//>http://www.codeguru.com/cpp/v-s/tips/debugging/article.php/c14681//>http://www.codeguru.com/cpp/v-s/debug/openfaq/article.php/c14799/
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now