I call a function (adding 2 nos for example), it passes the arguments using registers instead of the stack.
1. A search tells me this is fully legal but I am confused why. I always read that functions take arguments from the stack.
2. Is there any way to force the arguments in the stack? I found a stackoverflow answer but it uses inline assembly which is not feasible for me. [I am playing around with implementing functions in assembly and invoking them in C, which is troublesome due to this register pass (though I got it working).]
you should read about abi. how the arguments gets passed is defined by the specific abi. on arm-none for example, up to 4 args get passed in the registers, and the rest goes in the stack
doing that by registers optimizes a lot the calls, I would recommend you to read libffi or libffcall if you are interested in different ways of implementing FFI to C
Обсуждают сегодня