[C++] ๊ฐ€์ƒ์˜ ์›๋ฆฌ์™€ ๋‹ค์ค‘์ƒ์†

2024. 4. 29. 13:56ยท ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++

EX) ๋ชฌ์Šคํ„ฐ ๊ตฌ์กฐ์ฒด์—์„œ Attack ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๋ชฌ์Šคํ„ฐ A๋„ Attack ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , ๋ชฌ์Šคํ„ฐ B๋„ ๊ฐ™์€ Attack ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ‘‰ ๋‹ค์ˆ˜์˜ ๊ฐ์ฒด๊ฐ€ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋ฅผ ๊ณต์œ ํ•˜๋Š” ํ˜•ํƒœ

๋‹ค๋งŒ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๊ฐ์ฒด์˜ ์ •๋ณด๊ฐ€ ์ „๋‹ฌ์ด ๋˜๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์•ˆ์— ๋ฉค๋ฒ„ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š” ํ˜•ํƒœ์ด๋‹ค.

๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์— ์กด์žฌํ•˜์ง€๋งŒ, ๋ฉค๋ฒ„ํ•จ์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•œ ๊ณต๊ฐ„์— ๋ณ„๋„๋กœ ์œ„์น˜ํ•œ๋‹ค.

์ด ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋œ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ด๋ฅผ ๊ณต์œ ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

๐ŸŸฉ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”

์‹ค์ œ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•  ํ•จ์ˆ˜์˜ ์œ„์น˜์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”

ํ•œ ๊ฐœ ์ด์ƒ์˜ ๊ฐ€์ƒํ•จ์ˆ˜(virtual ํ•จ์ˆ˜)๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ '๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”'์ด๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ ๋‹ค.

๋งค ํ•จ์ˆ˜ํ˜ธ์ถœ์‹œ๋งˆ๋‹ค ์ด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

 

key : ํ˜ธ์ถœํ•˜๊ณ ์ž ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ถ„์ง€์–ด์ฃผ๋Š” ๊ตฌ๋ถ„์ž์˜ ์—ญํ• 

value : ๊ตฌ๋ถ„์ž์— ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 

๐Ÿ‘‰ ์ฆ‰, AAA ๊ฐ์ฒด์˜ Func() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ํ–‰์˜ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์—ฌ, 0x1024๋ฒˆ์ง€์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” Func1 ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ 

 

BBB ํด๋ž˜์Šค๋Š” AAA ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋ฐ, ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์—๋Š” AAA::Func1์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์Œ์— ์ฃผ๋ชฉํ•˜์ž.

์ฆ‰, ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๊ฐ€์ƒํ•จ์ˆ˜์˜ ์ฃผ์†Œ์ •๋ณด๋Š” ์œ ๋„ ํด๋ž˜์Šค์˜ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, main ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „, ์œ„์˜ ํ˜•ํƒœ๋กœ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ํ• ๋‹น๋œ๋‹ค.

๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์€ ๋ฉค๋ฒ„ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋˜๋Š” ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ƒ๊ด€์—†์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ํ• ๋‹น๋œ๋‹ค.

 

์ดํ›„, main ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋‚˜๋ฉด, ์œ„์˜ ๊ตฌ์กฐ์™€ ๊ฐ™์€ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

์ด์™€ ๊ฐ™์ด AAA ๊ฐ์ฒด์—๋Š” AAA ํด๋ž˜์Šค์˜ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์˜ ์ฃผ์†Œ ๊ฐ’์ด ์ €์žฅ๋˜๊ณ , BBB ๊ฐ์ฒด์—๋Š” BBB ํด๋ž˜์Šค์˜ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‚ด๋ถ€์ ์œผ๋กœ ํ•„์š”์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋Š” ์ฃผ์†Œ๊ฐ’์ด๋‹ค.

โœ๏ธ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์— ์˜ํ•œ ์†๋„ ์ €ํ•˜
๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ” ์ƒ์„ฑ๋จ ๐Ÿ‘‰ ์ด ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜์—ฌ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋จ ๐Ÿ‘‰ ์‹คํ–‰์†๋„ ๊ฐ์†Œ
๊ทธ๋Ÿฌ๋‚˜, ๊ทธ ์ฐจ์ด์˜ ์†๋„๊ฐ€ ๋งค์šฐ ์ ๊ณ , ๋˜ ์ด๋Ÿฌํ•œ ๋‹จ์ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๊ฐ€์ƒํ•จ์ˆ˜๋Š” ๋งŽ์€ ์žฅ์ ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

๐ŸŸฉ ๋‹ค์ค‘์ƒ์†

๋‘˜ ์ด์ƒ์˜ ํด๋ž˜์Šค๋ฅผ ๋™์‹œ์— ์ƒ์†ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ถ€์ •์ ์ธ ์˜๊ฒฌ์ด ์ง€๋ฐฐ์ ์ด๋‹ค. ๐Ÿ‘‰ ๋งค์šฐ ์˜ˆ์™ธ์ ์œผ๋กœ, ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

ํŠนํžˆ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ฉค๋ฒ„๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, ๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, ์ด ๋‘˜์„ ์ƒ์†ํ•˜๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, ์–ด๋А ํด๋ž˜์Šค์— ์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

 

๐ŸŒŸ ๊ฐ€์ƒ ์ƒ์†

class MiddleDerivedOne : virtual Base
class MiddleDerivedTwo : virtual Base

์œ„ ๊ตฌ์กฐ์˜ ๊ฒฝ์šฐ์— ๊ฐ€์ƒ ์ƒ์†์„ ํ•˜๊ฒŒ ๋˜๋ฉด, Base ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

 

cf. ๊ฐ€์ƒ ์ƒ์†์„ ํ•˜์ง€ ์•Š์œผ๋ฉด Base ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๊ฐ€ 2๋ฒˆ ํฌํ•จ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฆ„๋งŒ ๊ฐ€์ง€๊ณ  SimpleFunc() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋Š” ์—†๊ณ , ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•  ๊ฒƒ์ธ์ง€ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

MiddleFuncOne :: SimpleFunc();
MiddleFuncTwo :: SimpleFunc();

 

๊ฐ€์ƒ์ƒ์†์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ฆ„๋งŒ์œผ๋กœ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ > ๐ŸŽ  C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] String ํด๋ž˜์Šค ๋””์ž์ธ  (0) 2024.05.06
[C++] ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ  (0) 2024.04.30
[C++] ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ | ๊ฐ€์ƒํ•จ์ˆ˜(virtual function) | ์ฐธ์กฐ์ž  (1) 2024.04.26
[C++] ์ƒ์†  (0) 2024.04.23
[C++] ๋ณต์‚ฌ ์ƒ์„ฑ์ž | ๊นŠ์€ ๋ณต์‚ฌ์™€ ์–•์€ ๋ณต์‚ฌ  (0) 2024.04.19
'๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] String ํด๋ž˜์Šค ๋””์ž์ธ
  • [C++] ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
  • [C++] ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ | ๊ฐ€์ƒํ•จ์ˆ˜(virtual function) | ์ฐธ์กฐ์ž
  • [C++] ์ƒ์†
peewoong
peewoong
peewoong
peewoong.log
peewoong
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿ™‚ Info
    • ๐ŸŽฎ ๊ฒŒ์ž„ ๊ด€๋ จ ๊ฐœ๋…
    • ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๐ŸŽญ C
      • ๐ŸŽ  C++
      • ๐Ÿ• C#
      • โœจ ์ž๋ฃŒ๊ตฌ์กฐ
      • ๐ŸŽ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๐Ÿ”ข ์ˆ˜ํ•™
      • ๐ŸŽจ ๊ทธ๋ž˜ํ”ฝ์Šค
    • โš™๏ธ ์—”์ง„
      • ๐Ÿง€ VS
      • ๐Ÿค ์œ ๋‹ˆํ‹ฐ
      • ๐Ÿซ ์–ธ๋ฆฌ์–ผ
      • ๐Ÿน DirectX
      • ๐Ÿฆฅ error
    • ๐Ÿ“ฝ๏ธ ํ”„๋กœ์ ํŠธ
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.0
peewoong
[C++] ๊ฐ€์ƒ์˜ ์›๋ฆฌ์™€ ๋‹ค์ค‘์ƒ์†
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.