I’m reading “The Pragmatic Programmer” by Andrew Hunt and David Thomas.
At page 95, in the section named: “Debugging”, the authors wrote:
“Sometimes you’ll examine a variable, expecting to see a small integer
value, and instead get something like 0x6e69614d. Before you roll up
your sleeves for some serious debugging, have a quick look at the
memory around this corrupted variable. Often it will give you a clue.
In our case, examining the surrounding memory as characters shows us:20333231 6e69614d 2c745320 746f4e0a 1 2 3 M a i n St, \n No t 2c6e776f 2058580a 31323433 00000a33 o w n , \n X X 3 4 2 1 2\n\0\0Looks like someone sprayed a street address over our counter. Now we
know where to look.”
I cannot completely get this example.
1)What do the authors mean with “counter” in this context?
2)Why if someone sprayed a street address there, in our variable we should see the Memory Address and not the value “Main”?
3)In addiction, I’d like to ask also which tools allow you to look into the “memory neighborhood” as characters?
NB: please notice that the memory address (6e69614d), where the value: “Main” is held, is the same we found in our variable: 0x6e69614d
Counter is the small integer value they started the scenario off with.
That is not a memory address it’s a number in hex. It could be memory address, It could be a big number, it could be a few characters of an address as in 144th and Main…
As for tool, depends on waht environment you are working in.
You should note that this sort of issue plagued developers in unmanaged environments especially when using deliberately loose languages like C
All you need is a function that say takes a pointer to a string, which somewhere you’ve defined as 16 chars long.
Write 18 characters to it, you just trampled on the first two bytes of whatever was after your string.
Stricter languages like Pascal, or the more modern managed ones, will start screaming and shouting at you instead.
Note the fact that it’s much harder to do this by accident, also means it’s much harder to do it on purpose, so more modern doesn’t automatically translate into better.