본문 바로가기

Engineering/C/C++25

C에서 특정 주소로 점프하기 회사에 아는 선임분이 ARM 교육을 가셔서 부트 로더쪽 코딩으로 뭔가를 실습하는데, 잘 모르겠다고 메신저로 물어보시길 "C에서 특정 주소로 점프 하려면 우찌해야 하냐?" 참고로 부트로더의 역할을 내가 아는데로 간단하게 정리를 해보면 1. 뭔가를 한다 -_- (보통 시리얼 통신(rs-232,)을 통해 커널이미지를 정해진 주소에 다운로드 시키게 된다) 2. 특정 주소(커널 이미지의 시작점)로 점프를 한다. 3. 끝 -_- 역시 .. 내가 아는데로 정리하니 ... 간단하다 -_- . 다시 말해 모르는게 속편하다는 거 ㅋ 아무튼 질문을 받고 내가 처음에 바로 떠올린건 인라인 어셈블리였지만, '어셈은 안돼~' 라는 말에 함수포인터를 써보기로 하였다. 커널(커널함수)의 리턴이나 인자는 없다고 가정하였다. 쉽게 말해.. 2009. 7. 24.
오묘한 포인터와 배열의 세계 눈컴파일 및 실시간 두뇌 실행을 해봅시다. 거두절미 하고 아래의 소스는 과연 실행이 잘 될까? #include using namespace std; int main() { char str2[] = "abc"; str2[0] = 'A'; cout 2009. 5. 25.
[펌] C와 C++ 함께 쓰기 왜 C++ 와 C 가 함께 쓰기가 어려울까요 ? C++야 C에서 나왔으니까 당연히 두 언어는 함께 섞어 써도 아무런 문제가 없어야 되는거 아냐 ? 라고 생각하실지도 모르겠습니다. 그렇지만 C++와 C 를 섞어 쓰는 게 생각만큼 그리 쉽진 않습니다. 개선된 C로서 C++ 특징 중 하나가 함수 재정의(function override) 가 가능하다는 것이고, 이것을 처리하기 위해서는 함수 심볼명을 코드에 나온 그대로 생성하는 게 아니라 컴파일러가 조정할 필요가 있게 됩니다. 이렇게 컴파일러가 함수 심볼명을 재정의하는 것을 name mangling 이라고 하는데요, 이것 때문에 C와 C++를 섞어 쓰는게 쉽지 않습니다. 어떻게 name mangling 이루어 지는지 아래 코드를 통해 눈으로 확인해 보겠습니다. .. 2009. 4. 10.
유용한 프로그래밍 기법 통신관련 프로그래밍을 하다보면, 여러 장치간의 프로토콜을 정해야할 때가 있다. 패킷의 헤더를 정해야 할 것이고, 그 밖에 여러가지 것들, 그리고 데이터까지. 그런데 데이터의 길이가 가변적이라면? typedef unsigned int u32; typedef unsigned char u8; #pragma pack(1) typedef struct _packet_example { u32 op; u8 source; u8 dest; u8* data; } PACKET_EXAMPLE; #pragma pack() 다음과 같이 정의를 할 수 있을 것이다. 자 이렇게 하였을 때 이 패킷의 사이즈는 얼마가 될까? 4 + 1 + 1 + 4 = 10바이트가 될 것이다. 하지만 아래와 같은 기법도 있다. #pragma pack(1.. 2008. 12. 22.