본문 바로가기

ASM

arm asm - ubfs, lsl, orr, cbz, cbnz, stxr, ldxr ubfs x0, x1, #0, #8 해석 : x1 에서 0 부터 8개의 bit 를 취해서 x0 에 복사 즉, 0~7 까지의 bit 가 x0 에 복사됨 lsl w0, w1, w2 -> w0 = w1 w1=w2|w0 CBZ Rn, label CBNZ Rn, label Rn 이 0이면, label 로 jump CMP Rn, #0 BEQ label Rn 이 0이 아니면, label 로 jump CMP Rn, #0 BNE label LDXR reg, [addr] -> load from memory and exclusive monitor set E flag. STXR w0, reg, [addr] -> If excluseve monito.. 더보기
x86 inline assembly http://www.hep.wisc.edu/~pinghc/x86AssmTutorial.htm http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html int a=10, b; asm ("movl %1, %%eax; movl %%eax, %0;" :"=r"(b) /* output */ :"r"(a) /* input */ :"%eax" /* clobbered register */ ); Here what we did is we made the value of ’b’ equal to that of ’a’ using assembly instructions. Some points of interest are:"b" is the output operand, re.. 더보기
눈으로 보는 ARM - ASM 해석 저 처럼 User Application 을 시작으로 프로그래밍에 접근한 사람들에게는 ASM 은 꽤 귀찮은 언어입니다. 자주 쓰진 않지만, Powerful한 Low Level Debugging 을 위해서는 꼭 알아야 하는것 중에 하나지요. 물론, Document가 잘 되어 있기는 하지만, 봐도 헷갈리는 상황이 많습니다. 따라서 동작하는 모습들을 Trace32 장비를 이용해서 직접 capture 해서 정리해 보았습니다. 자주 사용하는 asm 위주로 준비하였고, 차후에 좀 더 데이터를 모으는데로 업데이트 하도록 하겠습니다. add r11, r13, #0x1c 더보기
compile 된 binary 가 thumb / thumb-2 인지 check 하기 오늘은 thumb-2 code 가 절 고민하게 만들었습니다. 아시다 시피 ARM 은 기본적으로 두가지 모드(arm code , thumb code) 를 지원합니다. arm 은 32bit instruction 이고 thumb 는 16 bit instruction 이지요. 헌데 thumb-2 와 thumbEE 라는 32 bit instruction 이 나와서 instruction 의 길이만으로 구별하기가 참 애매해 졌습니다. 단순하게 thumb 만으로만 build 된 경우 objdump 로 build 된 영역을 interpret 해 보면 thumb 인지 금방 알 수 있습니다. instruction 이 16bit 로 나오거든요.. thumb mode 로 빌드하려면 컴파일 시 다음 옵션을 추가하면 됩니다. -m.. 더보기
arm - SIGSERV나 SIGILL 이 발생했을때의 asm 동작 ldr r1,[r6,+r3] 만약 이 instruction 에서 문제가 발생했다고 하자. 구문을 해석하자면 r1 = *(r6 + r3) 입니다. r6+r3 에서 나오는 주소에 문제가 있어서 SIGSEGV 가 발생하였는데 이때 r1 에 영향이 없을것 같은데 r1 에는 0 이 대입됩니다. ARM - coretex 입니다. 더보기
objdump - 실행파일에서 asm code 확인 objdump 의 여러 기능이 있지만 다음과 같은 기능이 있습니다. 바로 실행 파일에서 sam code 를 바로 확인해 볼 수 있는거지요. 옵션을 보면 source 와 매칭을 시킬 수도 있을것 같은데 좀 더 익숙해 지면 업데이트 하겠습니다. >objdump -d a.out | grep -A10 '' 08052cbc : 8052cbc: 0d c0 a0 e1 30 or $0x30e1a0c0,%eax 8052cc1: d8 2d e9 04 b0 4c fsubrs 0x4cb004e9 8052cc7: e2 38 loop 8052d01 8052cc9: 30 90 e5 00 40 a0 xor %dl,0xa04000e5(%eax) 8052ccf: e1 00 loope 8052cd1 8052cd1: 00 53 e3 add.. 더보기
ARM ASM commond 해석 (LDMDB, LDMEA, STMDB, STMFD) 원문 : http://blog.naver.com/realdani?Redirect=Log&logNo=100007759984 asm 해석에 대한 내용은 볼때마다 까먹는다 ;;; 그나마 arm asm 은 간단해서 다행~ *********************************************************************** Decrement Before : 현제 가리키로 있는 곳에서 상위주소(0번지쪽으로) 가리킨후 실행(STMFD) LDMDB, LDMEA, STMDB, STMFD 는 모두 r13!,{r2-r3}였을 때 만약 r13에 !가 안붙으면 r13의 값은 변하지 않음 LD일 경우, 처음 r13이 #&14일때 마지막은 #&0C를 가리키고, r2에 Ox000000C번지의 word, r.. 더보기