songining
<ํ•ดํ‚น: ๊ณต๊ฒฉ์˜ ์˜ˆ์ˆ > ์ฑ…์„ ๋ณด๊ณ  ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค
X86 ํ”„๋กœ์„ธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ตฌ์กฐ์ฒด(structs)

-> ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ํ•˜๋‚˜์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ์ฒด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉ

-> ๊ตฌ์กฐ์ฒด๊ฐ€ ์ •์˜๋œ ํ›„์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋˜๊ณ , ๊ตฌ์กฐ์ฒด ํƒ€์ž…์œผ๋กœ ๋ณ€์ˆ˜๋‚˜ ํฌ์ธํ„ฐ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•ด์ง 

  • struct ๊ตฌ์กฐ์ฒด์ด๋ฆ„ *ํฌ์ธํ„ฐ์ด๋ฆ„ = malloc(sizeof(struct ๊ตฌ์กฐ์ฒด์ด๋ฆ„));๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ ์„ ์–ธ ๊ฐ€๋Šฅ 
  • ์‹œ๊ฐ„ ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฃฐ ๋•Œ /usr/include/time.h์— ์ •์˜๋˜์–ด ์žˆ๋Š” tm ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

tm ๊ตฌ์กฐ์ฒด์˜ ์ •์˜

struct tm {
	
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
    int tm_yday;
    int tm_isdst; 
    
  }

์ด ๊ตฌ์กฐ์ฒด๊ฐ€ ์ •์˜๋œ ํ›„์— struct tm์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋˜๊ณ , tm ๊ตฌ์กฐ์ฒด ํƒ€์ž…์œผ๋กœ ๋ณ€์ˆ˜๋‚˜ ํฌ์ธํ„ฐ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

struct tm current_time, *time_ptr;

time_ptr = &current_time; // time_ptr์„ current _time ์˜ ์ฃผ์†Œ๋กœ ์„ค์ • 

// ๊ตฌ์กฐ์ฒด์˜ ์š”์†Œ๋ฅผ ์ ‘๊ทผํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ• 
hour = current_time.tm_hour; // ์ง์ ‘ ์ ‘๊ทผ 
minute - time_ptr->tm_min; // ํฌ์ธํ„ฐ๋กœ ์ ‘๊ทผ 
second = *((int *) time_ptr); // ํฌ์ธํ„ฐ ์กฐ์ž‘์œผ๋กœ ์ ‘๊ทผ

* ๋งˆ์ง€๋ง‰ ๋ฐฉ๋ฒ•์— ์ฃผ๋ชฉ * 

tm ๊ตฌ์กฐ์ฒด์—์„œ ์ดˆ๋ฅผ ์–ป์–ด์˜จ ๋ฐฉ๋ฒ•์€?

-> tm๊ตฌ์กฐ์ฒด์˜ ๋งจ ์•ž์— tm_sec๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ทธ ์ •์ˆ˜ ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ ์•ž๋ถ€๋ถ„์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. 

์ฆ‰,  *((int *) time_ptr); ๋ฅผ ๋ณด๋ฉด time_ptr์ด tm ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ์—์„œ ์ •์ˆ˜ ํฌ์ธํ„ฐ๋กœ ํ˜• ๋ณ€ํ™˜์ด ๋˜๊ณ  ์ด ํฌ์ธํ„ฐ๊ฐ€ ๋””๋ ˆํผ๋Ÿฐ์Šค ๋˜์–ด ํฌ์ธํ„ฐ ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.  tm ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ๊ทธ ๊ตฌ์กฐ์ฒด์˜ ์ฒซ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ ์ด ๊ตฌ๋ฌธ์€ ๊ตฌ์กฐ์ฒด์˜ tm_sec ์ •์ˆ˜ ๊ฐ’์„ ๋œปํ•œ๋‹ค. 

๋˜ํ•œ tm ๊ตฌ์กฐ์ฒด์˜ ๊ฐ ์š”์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๋ฐ”๋กœ ์ด์›ƒํ•ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์˜ˆ๋ฅผ ๋“ค์–ด time_ptr์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ 0xbffff7f0 ์ด๊ณ , ํ˜„์žฌ ์‹œ๊ฐ์ด 04:22:24๋ผ๊ณ  ํ•  ๋•Œ, 

๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ”์ดํŠธ๋Š” 

0xbffff7f0 -> 18 00 00 00 16 00 00 00 04 00 00 00 ... 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ์Œ! 

 

์ฆ‰ ๊ตฌ์กฐ์ฒด์— ์ •์˜๋˜์–ด ์žˆ๋Š” ์ˆœ์œผ๋กœ 0x18(24) 0x16(22) 0x04(4) 4๋ฐ”์ดํŠธ์”ฉ ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์กฐ์ฒด ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Œ