Dit is C, hoe de werkelijke machine code eruit ziet is afhankelijk
van de compiler en ook de debugger.
Visual C (ik gebruikte cl v13.10) compileert deze code niet. Ik heb geen
idee wat er op jouw computer gebeurt.
Een programma kan gewoon door draaien na een access violation, dat
hangt van de debugger, compiler en instellingen af.
De code komt op mij warrig over. Probeer je verschillende overflows
tegelijkertijd te testen? Dat levert zelden een helder beeld. Focus op 1
ding en maak de rest van de code correct.
Ik heb visual studio c++ 6.0. Nog een vrij oude compiler. Dat van die
settings dat een process nog kon door draaien na een access violation
wist ik niet. Ik dacht het vrij normaal was dat een process dan
automatisch stopte.
Via de website
http://www.cplusplus.com/reference/clibrary/cstring/memset.htmlKwam ik een stukje tegen
memset (str,'-',6);. Gezien '-' kwam ik op
het idee deze te overflowen gezien het maar een character was. Dus
dacht toen als ik een functie schrisjf en de '-' overflow met memset een
overrun te maken. Wat ook gelukt is. Door de editor lijkt de code wat
rommelig dus hier heb je nog een keer alleen dan zonder fouten :
http://rafb.net/p/drNoHd84.htmlDoor '-' te overrunnen kwam ik alleen met een probleem als de loop
zich zou herhalen. Dus kwam toen op het idee de buffer in memset te
vergroten zodat memset 'a' niet meer kon kopieren en buiten de buffer
paste.
Dit kon je ook zien omdat het programma crashte en de nieuwe
eip address 61616161. Het lijkt erop dat die het oude eip
overschreef omdat het programma gewoon bleef runnen onder de cmd
shell.