Du skojar med mej nu eller?
Med "skriva sönder" menar jag att såklart inte att själva RAM-minnet går sönder utan det är innehållet som förstörs när man skriver på fel ställe och skriver över t.ex. stack eller variabler.
I vissa fall kan man också "skriva sönder" programkod som vilket kan utnyttas för att t.ex. exekvera skadlig kod.
Hur identifiera bortoptimerad kod?
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur identifiera bortoptimerad kod?
Ok, tolkade det som att du menade att fysiskt skriva sönder minnet.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur identifiera bortoptimerad kod?
Jag har provkört koden på https://www.onlinegdb.com/online_c_compiler.
Om parameter opt ligger i intervallet [2,5] är allt OK.
Men om parameter opt har värdet 1 kommer variabeln i att bli -1:
Om parameter opt ligger i intervallet [2,5] är allt OK.
Kod: Markera allt
opt = 2, str = 1.2345
opt = 3, str = 12.345
opt = 4, str = 123.45
opt = 5, str = 1234.5
Kod: Markera allt
if( dot == i) {
str[i] = i2str_dot;
i--; <------ Här slår i runt vid nedräkning från 0 och blir -1.
}
str[i] = r + 48u; <------ Här skrivs det *utanför* str.
Re: Hur identifiera bortoptimerad kod?
opt kan bara ta dessa värden:
Opt består av en kombination av ovanstående, 1 från varje grupp.
Risken att nånting konstigt kan hända är i princip noll.
Kod: Markera allt
#define I2STR_NODOT 0
#define I2STR_1DEC 5
#define I2STR_2DEC 4
#define I2STR_3DEC 3
#define I2STR_4DEC 2
#define I2STR_PLUSSIGN 8
#define I2STR_ADDSPACE 16
#define I2STR_L_ADJ 0
#define I2STR_R1ADJ 192
#define I2STR_R2ADJ 160
#define I2STR_R3ADJ 128
#define I2STR_R4ADJ 96
#define I2STR_R5ADJ 64
#define I2STR_R6ADJ 32
Risken att nånting konstigt kan hända är i princip noll.
Re: Hur identifiera bortoptimerad kod?
Om du visar ett minimalt "stand-alone"-exempel som innehåller felet behöver ingen spekulera. Dessutom lär du ju behöva ett sådant om du skall buggrapportera.