3 ms·
> You 'have' to go back to the start of your function to fill in the correct size of the stack frame foo: push ebp mov ebp esp sub esp .stacksz
by a1369209993 6y ago
> You 'have' to go back to the start of your function to fill in the correct size of the stack frame
foo:
push ebp
mov ebp esp
sub esp .stacksz
; ...
.stacksz = 0x14
leave
ret
> similar to how you handle filling in the branch offsets in forward branches in if/then/else, and that’s something you have to do, anyways
Pretty much this. I'm with Joker_vD on this one; I don't see a problem here.
- Someone 6y agoNeither do I. That’s why I wrote “the solution to that shouldn’t stop you, as it is similar to how you handle filling in the branch offsets in forward branches in if/then/else”. The above doesn’t solve the problem, though. It moves it to the assembler.
- benhoyt 6y agoThanks, that's a great idea -- not sure why I didn't think of that, as I am using the assembler to figure this out for if/else forward branches already (as the parent comment pointed out). I've added a paragraph to the article mentioning this comment. Thanks! Another approach I thought of is, instead of printing the output right away, append to a list of strings you'll output later, and patch it up yourself. But if we're using an assembler, we might as well get it to work for us. (The patching technique is commonly used for patching binary machine code.)