πŸ–₯ Computer Science/μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°

🧐 ν”„λ‘œμ„ΈμŠ€μ˜ μ œμ–΄ UnixλŠ” C ν”„λ‘œκ·Έλž¨μœΌλ‘œλΆ€ν„° ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ λ§Žμ€ μ‹œμŠ€ν…œ μ½œμ„ μ œκ³΅ν•©λ‹ˆλ‹€. λ‹€μŒμ€ λŒ€ν‘œμ μΈ κΈ°λŠ₯λ“€μž…λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€ ID κ°€μ Έμ˜€κΈ° ν”„λ‘œμ„ΈμŠ€ 생성과 μ’…λ£Œ μžμ‹ ν”„λ‘œμ„ΈμŠ€ 제거 ν”„λ‘œκ·Έλž¨μ˜ λ‘œλ”©κ³Ό μ‹€ν–‰ 🧐 ν”„λ‘œμ„ΈμŠ€ ID κ°€μ Έμ˜€κΈ° getpid : ν˜ΈμΆœν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ PIDλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. getppid : λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ˜ PIDλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. (즉 ν˜ΈμΆœν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“  ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.) 각각의 ν”„λ‘œμ„ΈμŠ€λŠ” κ³ μœ ν•œ ν”„λ‘œμ„ΈμŠ€ ID (PID)λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. μœ„μ˜ ν•¨μˆ˜λ“€μ„ 톡해 PIDλ₯Ό μ–»μ–΄μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ λ°˜ν™˜ νƒ€μž…μ€ pid_t νƒ€μž…μ˜ μ •μˆ˜ 값이며, μ΄λŠ” λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ types.h에 μ •μˆ˜λ‘œ μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 🧐 ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ κ΄€μ μ—μ„œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒκ³Ό 같은 ..
🧐 ν”„λ‘œμ„ΈμŠ€ ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œκ°€ λ§Œλ“€μ–΄ μ£ΌλŠ” μ‹€ν–‰ ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ€ μ˜€λŠ˜λ‚  μ‹œμŠ€ν…œμ—μ„œ 싀행될 λ•Œ, 마치 단 ν•œ 개의 ν”„λ‘œκ·Έλž¨λ§Œμ΄ μ‹œμŠ€ν…œμ—μ„œ λŒμ•„κ°€κ³  μžˆλŠ” 것 같은 착각이 λ“€κ²Œ ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 착각은 ν”„λ‘œμ„ΈμŠ€λΌλŠ” κ°œλ…μ— μ˜ν•΄ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. μ‹œμŠ€ν…œ λ‚΄μ˜ 각 ν”„λ‘œκ·Έλž¨μ€ μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯(context)μ—μ„œ λŒμ•„κ°‘λ‹ˆλ‹€. λ¬Έλ§₯은 ν”„λ‘œκ·Έλž¨μ΄ μ •ν™•ν•˜κ²Œ λŒμ•„κ°€κΈ° μœ„ν•΄μ„œ ν•„μš”ν•œ μƒνƒœλ‘œ κ΅¬μ„±λ˜λ©°, λ¬Έλ§₯ μ†μ—λŠ” λ©”λͺ¨λ¦¬μ— μ €μž₯된 ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œμ™€ 데이터, μŠ€νƒ, λ²”μš© λ ˆμ§€μŠ€ν„°μ˜ λ‚΄μš©, ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°, ν™˜κ²½λ³€μˆ˜, μ—΄λ € μžˆλŠ” 파일의 μ‹λ³„μžκ°€ ν¬ν•¨λ©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ‹€ν–‰ λͺ©μ νŒŒμΌμ˜ 이름을 μ‰˜μ— μž…λ ₯ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ 돌릴 λ•Œλ§ˆλ‹€ μ‰˜μ€ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜κ³ , μ‹€ν–‰ λͺ©μ νŒŒμΌμ„ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯μ—μ„œ μ‹€ν–‰..
🧐 μ œμ–΄νλ¦„ CPU에 전원을 처음 κ³΅κΈ‰ν•˜λŠ” μ‹œμ λΆ€ν„°, 전원이 κΊΌμ§€λŠ” μ‹œμ κΉŒμ§€ ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(PC)λŠ” μ—°μ†λœ (μΈμŠ€νŠΈλŸ­μ…˜μ˜) μ£Όμ†Œκ°’λ“€μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€. λͺ…λ Ήμ–΄ 1 λͺ…λ Ήμ–΄ 2 λͺ…λ Ήμ–΄ 3 ... λͺ…λ Ήμ–΄ n λͺ…λ Ήμ–΄ 1μ—μ„œ λͺ…λ Ήμ–΄ 2둜의 μ „ν™˜μ„ μ œμ–΄μ΄λ™μ΄λΌ λΆ€λ¦…λ‹ˆλ‹€. 그리고 μœ„μ™€ 같은 μ œμ–΄μ΄λ™μ˜ 배열을 (ν”„λ‘œμ„Έμ„œμ˜) μ œμ–΄νλ¦„μ΄λΌ λΆ€λ¦…λ‹ˆλ‹€. 🧐 μ˜ˆμ™Έμ μΈ μ œμ–΄ 흐름, ECF κ°€μž₯ κ°„λ‹¨ν•œ μœ ν˜•μ˜ μ œμ–΄νλ¦„μ€ λͺ…λ Ήμ–΄ 1κ³Ό λͺ…λ Ήμ–΄ 2κ°€ λ©”λͺ¨λ¦¬μ— μ„œλ‘œ λ‚˜λž€νžˆ μžˆλŠ” κ²½μš°μž…λ‹ˆλ‹€. μ œμ–΄νλ¦„ μ†μ—μ„œ jump, branches, call, return λ“±μ˜ λͺ…렁어가 μ‹€ν–‰λ˜λ©΄ μœ„μ™€ 같은 점진적인 μ œμ–΄νλ¦„μ΄ λ³€κ²½λ˜κ³ , μ„œλ‘œ λ‚˜λž€νžˆ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‹œμŠ€ν…œμ€ μœ„μ²˜λŸΌ λͺ…λ Ήμ–΄λ‘œ μΈν•œ μƒνƒœ λ³€ν™”κ°€ μ•„λ‹Œ, ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰κ³Ό..
🧐 버퍼 μ˜€λ²„ν”Œλ‘œμš° λ©”λͺ¨λ¦¬λ₯Ό λ‹€λ£¨λŠ” 데에 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ 잘λͺ»λœ λ™μž‘μ„ ν•˜λŠ” ν”„λ‘œκ·Έλž¨ 취약점을 μ˜λ―Έν•©λ‹ˆλ‹€. Cμ—μ„œλŠ” λ°°μ—΄ μ°Έμ‘° μ‹œ λ²”μœ„λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠμœΌλ©°, μ§€μ—­λ³€μˆ˜λ“€μ΄ 보쑴용 λ ˆμ§€μŠ€ν„°μ™€ 리턴 μ£Όμ†Œ 같은 정보듀과 ν•¨κ»˜ μŠ€νƒμ— μ €μž₯λœλ‹€λŠ” 것을 λ°°μ› μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ‘°ν•© λ•Œλ¬Έμ— μ‹¬κ°ν•œ ν”„λ‘œκ·Έλž¨ μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆλŠ”λ°, μŠ€νƒμ— μ €μž₯된 μƒνƒœμ •λ³΄κ°€ λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ λ°°μ—΄μ˜ μ›μ†Œμ— λŒ€ν•œ μ“°κΈ° μž‘μ—…μ— μ˜ν•˜μ—¬ λ³€κ²½λ˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. 그러고 λ‚˜μ„œ ν”„λ‘œκ·Έλž¨μ΄ λ ˆμ§€μŠ€ν„° 값을 λ‹€μ‹œ μ μž¬ν•˜κ±°λ‚˜, μ΄λ ‡κ²Œ λ³€κ²½λœ μƒνƒœμ •λ³΄λ₯Ό μ‚¬μš©ν•˜μ—¬ ret μΈμŠ€νŠΈλŸ­μ…˜μ„ μ‹€ν–‰ν•  λ•Œ 버그λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€. 일반적으둜 배열에 ν• λ‹Ήλœ 크기 μ΄μƒμ˜ λ©”λͺ¨λ¦¬λ₯Ό μ ‘κ·Όν•˜λŠ” 경우 버퍼 μ˜€λ²„ν”Œλ‘œμš° κ°€ λ°œμƒν•©λ‹ˆλ‹€. ν”ν•œ ν˜•νƒœλ‘œλŠ” 슀트링 μž…λ ₯의 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆ..
총 74μž₯ λΆ„λŸ‰μ΄κ³ , 전체 μ½”λ“œ ν•œμ€„ν•œμ€„ λ‹€ μƒμ„Έν•˜κ²Œ μ μ–΄λ’€μŠ΅λ‹ˆλ‹€. (ν™”μ΄νŒ…ν•˜μ„Έμš” :))
🧐 ν”„λ‘œμ‹œμ €μ˜ μ‹€ν–‰ ν”„λ‘œμ‹œμ €λŠ” μ§€μ •λœ μΈμžλ“€κ³Ό 리턴 κ°’μœΌλ‘œ νŠΉμ • κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” μ½”λ“œλ₯Ό κ°μ‹Έμ£ΌλŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν”„λ‘œμ‹œμ € Pκ°€ ν”„λ‘œμ‹œμ € Qλ₯Ό ν˜ΈμΆœν•œ λ’€, Qκ°€ μ‹€ν–‰λœ ν›„ λ‹€μ‹œ P둜 λ¦¬ν„΄λœλ‹€κ³  κ°€μ •ν•˜κ² μŠ΅λ‹ˆλ‹€. 즉 λ‹€μŒκ³Ό 같은 ν˜•μ‹μž…λ‹ˆλ‹€. Q() { F(); } ν”„λ‘œμ‹œμ €λ₯Ό 기계어 μˆ˜μ€€μ—μ„œ μ§€μ›ν•˜κΈ° μœ„ν•΄ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ” μ—¬λŸ¬ νŠΉμ„±λ“€μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€. μ œμ–΄κΆŒμ˜ 전달 : ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(PC)λŠ” Q에 μ§„μž…ν•  λ•Œ, Q에 λŒ€ν•œ μ½”λ“œμ˜ μ‹œμž‘μ£Όμ†Œλ‘œ μ„€μ •λ©λ‹ˆλ‹€. λ¦¬ν„΄ν•˜λŠ” 경우 Pμ—μ„œ Qλ₯Ό ν˜ΈμΆœν•œ ν›„ μ§„ν–‰λ˜μ˜€μ•Ό ν•  λ‹€μŒ μΈμŠ€νŠΈλŸ­μ…˜μœΌλ‘œ μ„€μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 데이터 전달: PλŠ” μ—¬λŸ¬κ°œμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό Q에 μ œκ³΅ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. QλŠ” Pμ—κ²Œ ν•˜λ‚˜μ˜ 값을 리턴할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό λ°˜λ‚©: QλŠ” μ‹œμž‘ν•  λ•Œ ..
🧐 반볡문 κΈ°κ³„μ–΄μ—λŠ” λ°˜λ³΅λ¬Έμ— λŒ€μ‘λ˜λŠ” μΈμŠ€νŠΈλŸ­μ…˜μ΄ μ—†μŠ΅λ‹ˆλ‹€. κ·Έ λŒ€μ‹  쑰건뢀 ν…ŒμŠ€νŠΈμ™€, 점프 μΈμŠ€νŠΈλŸ­μ…˜μ„ ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ λ°˜λ³΅λ¬Έμ„ ν‘œν˜„ν•©λ‹ˆλ‹€. GCC 와 λ‹€λ₯Έ μ»΄νŒŒμΌλŸ¬λ“€μ€ λ°˜λ³΅λ¬Έμ„ 두 개의 κΈ°λ³Έ 루프 νŒ¨ν„΄μ— κΈ°μ΄ˆν•˜μ—¬ μ½”λ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. κ°€μž₯ κ°„λ‹¨ν•œ do-whileλΆ€ν„° μ‹œμž‘ν•˜μ—¬ 보닀 λ³΅μž‘ν•œ κ΅¬ν˜„ 방법을 μ‚΄νŽ΄λ³΄λ©° 두 가지 νŒ¨ν„΄μ„ 닀루도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 🧐 do - while do-while λ¬Έμž₯의 일반적인 ν˜•νƒœλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. do { body-statement } while ( test-expr ); λ°˜λ³΅λ¬Έμ€ body-statement λ₯Ό 반볡적으둜 μ‹€ν–‰ν•˜κ³ , test-expr 을 κ³„μ‚°ν•˜μ—¬ κ·Έ κ²°κ³Όκ°€ 0이 μ•„λ‹ˆλΌλ©΄ λ°˜λ³΅ν•©λ‹ˆλ‹€. body-statement λŠ” 적어도 ν•œ 번 μ‹€ν–‰λœλ‹€λŠ” 것에 μ£Όλͺ©ν•˜λ©°, ν•΄λ‹Ή ..
🧐 μ œμ–΄ λͺ…λ Ή μ—¬λŸ¬ 쑰건문듀을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ œμ–΄ λͺ…령이 ν•„μš”ν•©λ‹ˆλ‹€. 일반적으둜 CPU 내뢀에 μƒνƒœλ₯Ό μ €μž₯ν•  수 μ—†κΈ° λ•Œλ¬Έμ—, λ ˆμ§€μŠ€ν„°μ— μƒνƒœλ₯Ό μ €μž₯ν•˜κ²Œ λ©λ‹ˆλ‹€. %rax λ ˆμ§€μŠ€ν„°λŠ” μž„μ‹œ 데이터, μ—°μ‚°μ˜ κ²°κ³Ό 등을 μ €μž₯ν•˜λ©° %rsp λ ˆμ§€μŠ€ν„°λŠ” λŸ°νƒ€μž„ μŠ€νƒμ˜ μœ„μΉ˜λ₯Ό, %rip λ ˆμ§€μŠ€ν„°λŠ” ν˜„μž¬ μ‹€ν–‰μ½”λ“œμ˜ μœ„μΉ˜λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. 그리고 졜근 μ§„ν–‰ν•œ μ—°μ‚°μ˜ 결과에 따라 μƒνƒœκ°€ λ³€κ²½λ˜λŠ” 4μ’…λ₯˜μ˜ (1λΉ„νŠΈ) ν”Œλž˜κ·Έ λ ˆμ§€μŠ€ν„°κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. 이름은 CF, ZF, SF, OF이며, 이듀을 톡해 쑰건문 λ“±μ˜ μ œμ–΄λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€. 🧐 Conditional Codes (쑰건 μ½”λ“œ) ν”Œλž˜κ·Έ λ ˆμ§€μŠ€ν„°λŠ” μ‘°κ±΄μ½”λ“œ λ ˆμ§€μŠ€ν„°λΌκ³ λ„ λΆˆλ¦½λ‹ˆλ‹€. 이듀은 μ‚°μˆ  μ—°μ‚°μ˜ 결과에 따라 값이 λ°”λ€ŒλŠ” λ ˆμ§€μŠ€ν„°λ“€μž…λ‹ˆλ‹€. μ£Όμ˜ν•˜μ—¬μ•Ό ν•  점은 movq ν˜Ήμ€ l..
말 λž‘
'πŸ–₯ Computer Science/μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (2 Page)