145a8a: 83 c3 14 add $0x14,%ebx
Okay, sorry, I didn't know you looked that closely into this. That's quite unrefuteable.
The only question that I still have is then WTF the compiler was thinking... this just sounds like a plain bug somewhere (but I agree that doesn't really help us much). We could still work around it with an explicit __attribute__((aligned, 4)) or __attribute__((packed)) if that works... I guess if the compiler does this for no apparent reason, then there's no real guarantee that a simple list of pointers won't also get screwed up like this?