반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Windows Kernel
- 개발 환경 준비
- apphelp.dll
- 윈도우 커널 디버깅
- 시스템해킹
- pwnable
- hacking
- 해킹
- 윈도우 커널
- Windows Kernel Driver
- IAT Hooking
- vcruntime140.dll
- 포너블
- ucrtbase.dll
- pcap packet capture
- Windows
- Windows Kernel Debug
- Msvcrt.dll
- pcap packet
- C언어 패킷캡쳐
- packet capture
- windows kernel debugging
- arudino
- 개발하기
- HackCTF
- 바이트 오더
- Network Byte Order
- vcruntime.dll
- 네트워크 바이트 오더
- 윈도우 커널 드라이버
Archives
- Today
- Total
미친해커
[Nintendo 3DS] 닌텐도 3DS 개발환경 구축하기 본문
반응형
닌텐도 3DS 개발에 도전하게된 이유
이유는 없다. 필자가 지금까지 무언가에 도전하는데에는 큰 이유가 있지 않다. 그냥 단순히 재밌어보이고 해보고 싶기 때문이다. 이번에도 닌텐도 3DS의 시스템에 관심이 생겨 한번 도전하게 되었다.
닌텐도 3DS 개발환경 구축
1. devkitPro Install
devkitPro는 GCC 툴체인 기반의 ARM을 지원하는 컴파일러이다. 닌텐도 3DS는 ARM 기반의 시스템이기 때문에 ARM 컴파일러가 필요하다. 이를 위해 devkiPro를 이용해 크로스 컴파일(다른 환경의 바이너리로 컴파일 하는 것)을 한다. 다음 링크에서 Installer를 다운한다.
위 과정을 따라오면 3DS 개발용 컴파일러가 설치되고 환경변수도 설정된다.
2. Visual Studio Code 컴파일 설정
make를 사용해 컴파일을 할 수도 있지만 나는 따로 설정했다.
// c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:/devkitPro/libctru/include/**",
"C:/devkitPro/devkitARM/arm-none-eabi/include/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:/devkitPro/devkitARM/bin/arm-none-eabi-gcc.exe"
}
],
"version": 4
}
// tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "arm-none-eabi-gcc Nintendo 3DS Compile",
"type": "process",
"command": "cmd",
"args": [
"/c",
"C:\\devkitPro\\devkitARM\\bin\\arm-none-eabi-gcc.exe",
"-MMD",
"-MP",
"-MF",
"${fileDirname}\\${fileBasenameNoExtension}.d",
"-g",
"-Wall",
"-O2",
"-mword-relocations",
"-ffunction-sections",
"-march=armv6k",
"-mtune=mpcore",
"-mfloat-abi=hard",
"-mtp=soft",
"-I",
"${fileDirname}",
"-I",
"C:\\devkitPro\\libctru\\include",
"-D__3DS__",
"-c",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.o",
"&&",
"C:\\devkitPro\\devkitARM\\bin\\arm-none-eabi-gcc.exe",
"-specs=3dsx.specs",
"-g",
"-march=armv6k",
"-mtune=mpcore",
"-mfloat-abi=hard",
"-mtp=soft",
"-Wl,-Map,${fileDirname}\\${fileBasenameNoExtension}.map",
"${fileDirname}\\${fileBasenameNoExtension}.o",
"-LC:\\devkitPro\\libctru\\lib",
"-lctru",
"-lm",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.elf",
"&&",
"C:\\devkitPro\\devkitARM\\bin\\arm-none-eabi-gcc-nm.exe",
"-CSn",
"${fileDirname}\\${fileBasenameNoExtension}.elf",
"&&",
"C:\\devkitPro\\tools\\bin\\smdhtool.exe",
"--create",
"패키지 이름",
"프로그램 이름",
"제작자",
"C:\\devkitPro\\libctru\\default_icon.png",
"${fileDirname}\\${fileBasenameNoExtension}.smdh",
"&&",
"C:\\devkitPro\\tools\\bin\\3dsxtool.exe",
"${fileDirname}\\${fileBasenameNoExtension}.elf",
"${fileDirname}\\${fileBasenameNoExtension}.3dsx",
"--smdh=${fileDirname}\\${fileBasenameNoExtension}.smdh"
],
"options": {
"cwd": "${workspaceFolder}"
},
"group": "build",
"detail": "컴파일러: arm-none-eabi-gcc"
}
]
}
위 두개의 파일을 각각 저장해 VS Code의 Workspace 폴더 최상위에 .vscode 폴더를 만들어 넣어주면 된다.
3. Nintendo 3DS 에뮬레이터 설치
실제로 커펌(커스텀 펌웨어)된 닌텐도 3DS가 없는 경우에는 닌텐도 3DS 개발을 하더라도 해당 바이너리를 실행시킬 수 없다. 그렇기에 다음과 같이 에뮬레이터를 설치해주자
4. 셋팅 확인
이렇게 cmd를 열고 where make 명령어를 했을 때 정상적으로 잡히면 성공이다. 잡히지 않는다면 따로 환경변수 셋팅을 해주도록 하자.
반응형
'Nintendo > 3DS' 카테고리의 다른 글
[Nintendo 3DS] hello-world 예제 코드분석(주석설명) (0) | 2022.04.21 |
---|---|
[Nintendo 3DS] 닌텐도 3DS 예제 컴파일하기 (0) | 2022.04.20 |
Comments