전체 글 195

shift 연산으로 원하는 값 만들기 팁

shift 크기를 내가 마음대로 결정할 수 있는 경우가 있다. shift 연산이야 그냥 하면 되는데 왜 이런 글을 썼을까? 32비트 기준으로 맨오른쪽에 있는 비트 1이 맨왼쪽끝으로 오려면 shl 31 할 때이다. 즉 shl 32 부터는 32비트 레지스터에 담겨있던 기존의 모든 값이 shift 연산으로 날아간다. 그래서 0이 되는 것이 아닌가? 했는데 결과가 그렇지 않아서 의문이 생겼다. x86 guide에 따르면 다음과 같다. “shifts counts of greater than 31 are performed modulo 32” 따라서 mov eax, 1 shl eax, 89 결과는 0x200이 된다.

pushad assembly

레지스터 값들을 스택에 쫙 백업한다. push 명령어는 pop 명령어와 짝궁이듯, pushad 명령어는 popad와 짝궁이다. pushad 명령어로 백업되는 레지스터들의 순서는 다음과 같다. EAX -> ECX -> EDX -> EBX -> ESP -> EBP -> ESI -> EDI 즉 pushad를 하고 디버거에서 보는 스택 상황을 보면 아래와 같다. (스택 주소는 High->Low로 신장한다. 하지만 보통 디버거창을 보면 High주소를 아래로 두므로 많이들 헷갈려 하는듯) (Low) EDI ESI EBP ESP EBX EDX ECX EAX (High)

Assembly 2019.11.15

shellscript source 명령어

source [-h] filename filename 안의 명령어를 읽는다. 현재 쉘의 환경변수가 재설정 된다. 파일을 source 명령어로 실행시키면 해당 파일에 설정된 모든 변수들이 현재 쉘의 일부가 된다. source .bash_profile . .bash_profile ---------------------------------------------------------------------- source 명령은 bash의 내부 명령어입니다. 즉, 명령어가 따로 존재하는 것이 아니라, bash에 포함되어 있는 명령어이기 때문에 bash 쉘이 작동중일 때만 동작합니다. 만약 다른 쉘을 사용하시면 사용 불가능 합니다. 그리고 source 명령어 대신 . 을 사용하셔도 같은 역할을 합니다. source..

카테고리 없음 2019.10.08

[오류] /bin/sh 실행 시 "no such file or directory"

[오류] /bin/sh 실행 시 "no such file or directory" 나는 지금 Qemu에 firmware를 올려놓고 fimware RootFS의 root path를 새로운 root 경로로 chroot 한 상태이다. 여기서 펌웨어에 있는 /bin/sh를 실행시키려 하는데, 분명히 파일이 존재함에도 "no such file or directory"라는 문구가 뜬다. 왜? 이 진짜 의미는 "내가 지금 얘를 실행시킬 수가 없어, 뭔가가 없잖아!" 라는 뜻이다. library dependency를 충족시켜주자. ldd /bin/bash : 의존성 라이브러리를 확인. mount -o bind : 의존성 띄는 라이브러리가 있는 폴더를 마운트 시켜도 됨. (chroot가 아닌 원본에는 라이브러리가 있을테..

IoT 임베디드 2019.09.30

[MFC] 버튼클릭으로 탭 전환하기 + 상단 탭 목록 잠그기

[MFC] 버튼클릭으로 탭 전환하기 [메인다이얼로그] 1. 탭 컨트롤 변수 선언 (m_KingTab) 2. 각각의 탭 컨트롤 변수 선언 (m_tab1, m_tab2, ... ) 3. 탭 연동 4. 현재 탭 저장할 탭 포인터 변수 선언 (m_pwndShow) 탭 입장에선 부모는 tab control이고 한번 더 부모를 타면 MainDlg 일 것이다. 버튼이 있는 탭에서 버튼에 대한 함수를 아래와 같이 정의한다. void Tab1::OnBnClickedButtonNext() { //TODO: Add your control notification handler code here //tab1의 부모는 tabControl임. 한번 더 부모를 가져와야 CYourMainDlg. CYourMainDlg* pMainDl..

MFC 2019.08.22

Tesseract, Leptonica 설치 정리

Tesseract, Leptonica 설치 정리 1. Leptonica 빌드하기 Leptonica는 사실 그냥 편하게 GUI CMake 툴에 폴더만 지정하고 별다른 설정 없이 돌려도 빌드는 잘 된다. (하지만 내 프로젝트에 빌드한 lib, dll 포함시키고 막상 사용 시에 함수가 없다며 안돌아간다...!) build 경로는 output이 나올 경로를 지정하는 거라 본인 편한대로 지정하면 된다. 2. Tesseract 빌드하기 Tesseract는 Leptonica 경로만 설정해 주면 정상적으로 Configure-Generate가 가능하다. (Build는 조금 더 설정 필요함) Leptonica를 먼저 build한 후에 그 경로를 Leptonica_DIR에 적으면 된다. 나는 x64로 만들 거라 x64로 명..

OCR/Tesseract 2019.07.23

C++ 이미지 split, merge

Multi Channels -> B, G, R 각각의 Single Channel로 split해보고, 이를 다시 merge하여 다시 3채널의 컬러이미지로 되돌려 보자. Mat img = imread('my_image.jpg', IMREAD_COLOR); IMREAD_COLOR로 읽으면 B,G,R의 3개의 채널이 결합된 Multi-channel인 상태다. *각각의 채널로 나누어보자. Mat bgr[3]; //split 해서 3개의 채널을 담을 배열 선언 split(img, bgr); //3 channels를 가진 img를 split해서 각각의 single channel을 bgr 배열 요소에 담음. 3개의 채널이 합쳐졌을 때 B,G,R의 값에 따라 색상을 가지는 것이지 --> (255, 0, 0) : R:25..

OCR/OpenCV 2019.07.04