Could you elaborate a bit more on the "delta offset" technique? I think it's not that immediate why it's needed. If I understand correctly, the reason is that the shellcode won't be loaded at its preferred virtual address most of the times, so we need a way to compute the difference between that address and the real one.
From your description, it seems the result of
sub ebp, offset routine is always 0, which doesn't make sense (in that case we wouldn't need any trick and a simple
xor ebp, ebp would be enough). So, from what I understand, the result of that subtraction won't likely be 0 and that's why we need the delta offset technique. What do you think?