0x00008cf8 <+8>: push {r6} ; (str r6, [sp, #-4]!)
0x00008cfc <+12>: add r6, pc, #1
0x00008d00 <+16>: bx r6
0x00008d04 <+20>: mov r3, pc
0x00008d06 <+22>: adds r3, #4
이런 코드가 있을 때,
(코드 자체에 오류는 없음)
r6 = 0x00008d01 이 들어가게 되고,
bx r6 가 실행되면서, pc = 0x00008d01이 들어가잖아?
그럼 이때 컴이 0x00008d01부터 코드를 읽게 될텐데,
이게 "bx r6" 코드 중간부터 갑자기 읽데 되는건데
그럼 다음 정상적인 명령 코드가 나오기 전까지의 코드들 0x00008d01~3은 무시되는거야?
아니면 이것도 코드가 읽힌다면 어떻게 읽히는거야?
왜 0x00008d01임
잘모르지만박음직하네요
add r6, pc, #1 이줄 실행할때, pc에 들어있는 값이 0x00008d00아님?
요즘 어셈블리는 좀 특이하네 #이뭐야? 나도 어셈블리 독학은 했지만 bx r6이렇게만 달랑 나온것도 첨봄
근데 왜 1을 더하냐? 16비트냐?
코드는 그냥 포너블 문제 중 일부일 뿐이라 1 더하는 것에 큰 의미가 있는건 아냐
thumb 모드 왜쓰냐? 극혐
암튼 저렇게 명령 한줄 중간부터 코드를 읽으면 어케되냐
병시나 bx가 arm모드하고 thumb모드 변환하는 명령어잖아. 근데 난 cf8하고 cfc가 왜 쓰였는지 이해가 안가네. 나도 좆늅이라
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489e/Cihfddaf.html
bx명령어나 제대로 알고 와라
16비트로 전환되니까 16비트 인스트럭션에 준수하기 때문에 당연히 명령어 주소또한 줄어들지 않을까 싶다
아 근데 타겟이 arm 몇버전이냐에 따라 다를 수 있겠다. 일단 thumb모드를 지원해야하니까
아니 그냥 문제 중 일부 코드일 뿐이라 코드가 왜 저런지는 상관없다고 내가 궁금한건 코드가 맞냐 틀리냐가 아니라 명령 한 중간의 주소로 점프했을 때 그 코드가 유효한지 아니면 무시되고 다음 명령줄부터 읽는지야
중간으로 점프되면 무시나 오류 둘중 하나겠지. 유효할리가 있냐? 그리고 bx로 인해 arm모드에서 thumb모드로 전환된다면 16비트 모드로 변환되기 때문에 명령어주소 또한 16비트로 전환되지 않냐? 아 나도 공부좀 더 해야긋다
내생각엔 잘못된 명령어로 인한 오류가 날듯 하다
그리고 bx가 모드 변경 이후에 점프하는거잖아.
일단 인증된 문제라 돌아가는데는 오류가 없음. 무튼 의견 고맙다
어셈공부할땐 qemu가 체고조넘이다