Wargame/Lord of BOF (Redhat)2012. 11. 30. 20:53

Assassin

id : giant

pwd : one step closer


'Wargame > Lord of BOF (Redhat)' 카테고리의 다른 글

[Level17]zombie_assassin -> succubus  (0) 2012.12.07
[Level16]assassin -> zombie_assassin  (0) 2012.12.06
[Level14]bugbear -> giant  (0) 2012.11.28
[Level13]darkknight -> bugbear  (0) 2012.09.02
[Level12]golem -> darkknight  (0) 2012.08.21
Posted by slimV
Note2012. 11. 30. 11:29

DllImport String Parameter 전달



C#에서 C나 C++의 기능을 사용하기 위해서는

C나 C++로 만든 dll을 이용해야 합니다.

int 형이나 uint, byte, char 등을 함수에서 사용할 경우에는 큰 어려움이 없지만

char[]이나 char*을 사용해 string을 전달할 때에는 곤란한 상황을 맞게 됩니다.

unsafe를 사용하는 방법도 있지만 다른 방법도 있습니다.


Dll과 C# 사이에서 unsafe를 사용하지 않고 string parameter를 전달하는 방법을 알아보겠습니다.


먼저 dll 내부의 함수 원형입니다.

Process의 이름을 입력하면 해당 process가 load 될때까지 기다렸다가

PID를 return 해주는 간단한 함수입니다.

Calling convention은 standard call 입니다.


C#에서 DllImport를 사용하는 부분입니다.

DWORD는 uint로

const char*는 Byte[]로 처리했습니다.


C#에서 함수를 사용하는 부분입니다.

Encoding을 통해 string을 byte array로 변환합니다.

변환된 byte array를 함수로 넘겨주면 정상적으로 작동합니다.


반대로 return 값이 string 형태라면

C#에서 함수의 return type을 byte array로 선언해주고

Return 받은 값을 char array로 encoding 해주면 됩니다.


'Note' 카테고리의 다른 글

Windbg symbol path  (0) 2015.02.03
FILE Structure  (0) 2012.12.27
Visual Studio 2010 IDE 설정  (0) 2012.11.29
IE Single Process 설정  (0) 2012.10.19
Posted by slimV
Note2012. 11. 29. 22:39

Visual Studio 2010 IDE 설정



Visual Studio 2010은 각 언어별로 다른 개발환경을 제공합니다.

C와 C#같은 경우 개발환경이 서로 다릅니다.

C를 개발하는데 C# 개발환경을 사용한다던가 하는 경우 쓸데없는 창을 띄워놓게 됩니다.

그러므로 개발하는 언어에 따라 개발환경을 바꿔주면 편합니다.

개발 환경을 변경하는 방법을 보겠습니다.


위의 화면은 C 개발환경에서 C#으로 개발하는 모습입니다.

C# 개발환경으로 바꿔보겠습니다.


도구 탭에서 설정 가져오기 및 내보내기를 선택합니다.


모두 다시 설정을 선택합니다.

Visual Studio에서 제공하는 기본 설정을 사용할 수 있습니다.


현재 개발환경을 저장하고 싶으면 저장을 하고 아니면 그냥 덮어씁니다.


원하는 개발환경을 선택합니다.


C# 개발환경으로 설정되었습니다.


'Note' 카테고리의 다른 글

Windbg symbol path  (0) 2015.02.03
FILE Structure  (0) 2012.12.27
DllImport String Parameter 전달  (0) 2012.11.30
IE Single Process 설정  (0) 2012.10.19
Posted by slimV