The distinctions are very subtle, and while I don't necessarily disagree with Brett, I think he's overstating.To really answer this you might need to study many examples in context.
Well, remember that the library was very good about preserving the values in the registers, so once you put a value into the register, it stayed there. It would always have 0000 in it when that function was called. So when the function returned it would jump to address 0000, which just so happened to be a RET, which would pop the next value (the correct return address) off the stack, and jump to that. Of course, in my app, I had a different value in R1, so it just crashed....
Also notice the following examples where "run into" doesn't sound good or it changes the meaning of a sentence: With things, it's simple.
When you find something by chance, you come across it.
This was on Linux but could have happened on virtually any OS.
Now most of you are probably familiar with the BSD socket API. We were working on a massively parallel application that would have many sockets open.