Sida 3 av 3

Re: Hur identifiera bortoptimerad kod?

Postat: 31 maj 2020, 22:03:24
av Jan Almqvist
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.

Re: Hur identifiera bortoptimerad kod?

Postat: 31 maj 2020, 22:11:50
av TomasL
Ok, tolkade det som att du menade att fysiskt skriva sönder minnet.

Re: Hur identifiera bortoptimerad kod?

Postat: 1 juni 2020, 07:39:02
av guckrum
Hur ser ett minimalt exempel med "felet" ut?

Re: Hur identifiera bortoptimerad kod?

Postat: 1 juni 2020, 08:16:31
av Jan Almqvist
Jag har provkört koden på https://www.onlinegdb.com/online_c_compiler.

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 
Men om parameter opt har värdet 1 kommer variabeln i att bli -1:

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?

Postat: 1 juni 2020, 22:34:12
av TomasL
opt kan bara ta dessa värden:

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
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.

Re: Hur identifiera bortoptimerad kod?

Postat: 2 juni 2020, 08:25:51
av guckrum
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.