Comparing C to machine language

2022. 3. 12. 00:42기타/info

복습하는 와중에 c언어를 어셈블리어로 잘 풀어 올린 영상이 있어서 공유하려고 합니다 

영상에 나오는 내용을 실습을 해보아서 간단하게 소개도 해볼까합니다...

원래는 gdb형식이 intel로 변환해서 보는게 편했는데 이번에는 at&t형식으로 해보겠습니다

[gdb형식이 달라서 영상처럼 안나오는점 양해부탁드리고 공부하는 입장이라 틀린게 있어서 양해부탁드리겠습니다 (:]

 

https://www.youtube.com/watch?v=yOyaJXpAYZQ

 

fib source code
gdb at&t


main+16 = 0xfffffffc에 0[0x0]대입 -> 0xfffffffc = x

main + 23 = 0xfffffff8 에 1[0x1]대입 -> 0xfffffff8 = y


main+33부터 main+41까지는 printf부분인것같네요...

main+33에서 0xfffffffc가 x이고 push해주네요 main+36은 잘모르겠는데 아마 %d부분이 아닐까 생각이 드네요

main+41에서는 call함수를 호출해주고있습니다


main+46부터 main+55까지는 z=x+y부분인 것 같습니다

main+49에서 0xfffffff8이 y였는데 eax에 전달하고

main+52에서 0xfffffffc는 x였는데 add해서 eax에 전달해주네요

main+55에서 합친값을 0xfffffff4로 전달해주는데 아마 0xfffffff4가 z일것 같고 z = x + y가 완료된 것 같습니다

main+58에서 main+67까지는 x=y, y=z부분인 것 같습니다

main+58에서 y인 0xfffffff8을 eax에 전달하고

main+61에서 y가 저장된 eax를 x인 0xfffffffc에 대입합니다

main+64에서 z인 0xfffffff4를 eax에 전달하고

main+67에서 z가 저장된 eax를 y인 0xfffffff8에 대입하네요


main+70에서 main+77까지는 조건비교구간인 것 같습니다

main+70에서 cmp[=compare]을 통해 0xfe[254]와 x인 0xfffffffcf를 비교합니다

main+77에서 조건에 부합이 안되면 main+30으로 돌아가 다시 printf문을 실행하고

조건이 부합되면 main+79로 이동해서 main+16[x=0위치]로 점프하네요

 

확실히 위 영상을 보면 제가 풀어쓴 것보다 깔끔하게 이해되실거예요...

'기타 > info' 카테고리의 다른 글

opt-in & opt-out  (0) 2022.05.31
Base64 Encoding  (0) 2022.03.21
URL Encoding Table  (0) 2022.03.17
SHELL CODE  (0) 2022.03.10
ASCII Table  (0) 2022.03.06