ååã¯ãQEMU ï¼ã¿ã¼ã²ãã㯠STM32F4-Discoveryï¼ã§åããããµã³ãã«ã½ã¼ã¹ã®ãªã³ã«ã¹ã¯ãªããã®å
容ã確èªãã¾ããã
ä»åã¯ãããã¾ã§ä½¿ã£ã¦ãããµã³ãã«ã½ã¼ã¹ããã«ããã¦çæããã ELFãã¡ã¤ã« ã®å
容ãè¦ã¦ããããã¨æãã¾ãã
ããã§ã¯ããã£ã¦ããã¾ãã
åèæç®
ããã¥ã¢ã«
STM32F4 ã®ããã¥ã¢ã«
ä¸è¨ãªã³ã¯ã®ããã¥ã¡ã³ãâãªãã¡ã¬ã³ã¹ããã¥ã¢ã«ãããã¥ã¡ã³ãâããã°ã©ãã³ã°ããã¥ã¢ã«ãªã©ãåç
§ãã¦ãã ãããæè¿ã¯ãããã¥ã¢ã«ãæ¥æ¬èªåããã¦ãã¦ãã¨ã¦ã便å©ã§ãã
デザイン/サポート | STM32, STM8ファミリはSTの32bit/8bit汎用マイクロコントローラ製品
ãªã³ã«ã®ããã¥ã¢ã«
https://sourceware.org/binutils/docs/ld/
ã¯ããã«
ãQEMUãåãããã®è¨äºä¸è¦§ã§ããè¯ãã£ããåèã«ãã¦ãã ããã
QEMUãåããã®è¨äºä¸è¦§
ããã§ã¯ããã£ã¦ããã¾ãï¼
ãã¤ããªã¨ãã£ã¿ï¼HxDï¼ã®ã¤ã³ã¹ãã¼ã«
ELFãã¡ã¤ã«ã®å
容ã確èªããã®ã«å¿
è¦ãªã®ã¯ãã¾ãã¯GNUãã¼ã«ã¨ãã¤ããªã¨ãã£ã¿ãããã°ååã ã¨æãã¾ãã
GNUãã¼ã«ã¯ãUbuntu ãªãããã©ã«ãã§å
¥ã£ã¦ãããããã¾ããï¼binutils ã®ä¾ãã° readelfï¼ã第1åã® STM32(ARM Cortex-M)をQEMUで動かす(環境構築編) - daisukeの技術ブログ ã§ã¤ã³ã¹ãã¼ã«ããã¯ãã¹ã³ã³ãã¤ã©ã«ãå
¥ã£ã¦ã¾ãï¼arm-none-eabi-readelfï¼ã
ãã¨ã¯ãç´æ¥ãã¡ã¤ã«ãè¦ãããã«ããã¤ããªã¨ãã£ã¿ãå¿
è¦ã§ãããã¤ããªã¨ãã£ã¿ãªãä½ã§ãããã§ãããããã§ã¯ãHxD ãã¤ã³ã¹ãã¼ã«ãã¾ãã
mh-nexus.de
Version ã¯ã2.5.0.0 ãææ°ã®ããã§ãã
ãã¦ã³ãã¼ãï¼HxDSetup.zipï¼ããããä¸ã«å
¥ã£ã¦ãHxDSetup.exe ãå®è¡ãã¾ãã
è¨èªã®é¸æç»é¢ã«ãªãã®ã§ãæ¥æ¬èªã®ã¾ã¾ã§ãOKãã¯ãªãã¯ãã¾ãã
ã¤ã³ã¹ãã¼ã«ç»é¢ã表示ãããã®ã§ã次ã¸ãã¯ãªãã¯ãã¾ãã
ã©ã¤ã»ã³ã¹ã®ç¢ºèªç»é¢ã表示ãããã®ã§ããåæãããã«ãã§ãã¯ãå
¥ãã¦ã次ã¸ãã¯ãªãã¯ãã¾ãã
ã¤ã³ã¹ãã¼ã«å
ã®æå®ã表示ãããã®ã§ãåé¡ãªããã°æ¬¡ã¸ãã¯ãªãã¯ãã¾ãã
ãã¹ã¯ããããã¯ã¤ãã¯èµ·åã«ã¢ã¤ã³ã³ãä½æããããèãããã®ã§ãã好ã¿ã§é¸ãã§ã次ã¸ãã¯ãªãã¯ãã¾ãã
ã¤ã³ã¹ãã¼ã«æºåå®äºã表示ãããã®ã§ãã¤ã³ã¹ãã¼ã«ãã¯ãªãã¯ãã¾ãã
ã¤ã³ã¹ãã¼ã«ãå®äºãã¾ãããå®äºãã¯ãªãã¯ãã¾ãã
STM32F4-Discoveryã®STM32F407VGã®ãã¼ã¿ã·ã¼ãæ
å ±
ãã¼ã¿ã·ã¼ãã¯ãSTM32ã®ä»ã®ããã¥ã¢ã«ã¨åãããhttps://www.stmcu.jp/design/ããããã¦ã³ãã¼ãã§ãã¾ãã
ãã¼ã¿ã·ã¼ãã«ããã¨ãä»åã¿ã¼ã²ããã«ãã¦ãããSTM32F4-Discoveryãã®ãSTM32F407VGãã¯ã1MBã®Flashã¡ã¢ãªã¨ã192KBã®RAMãæè¼ãã¦ãã¾ãã
ç´ ç´ã«å²ãå½ã¦ãã¨ãFlashã¡ã¢ãªã¯ã0x08000000 ãã 0x080FFFFF ã«ãªãã¾ããRAMã¯ããã¼ã¿ã·ã¼ããè¦ãã¨ãã¡ãã£ã¨å¤åçã§ã3ãæã«ã0x10000000-0x2000FFFFï¼64KBï¼ã¨ 0x20000000-0x2001BFFFï¼112KBï¼ã¨ 0x2001C000-0x2001FFFï¼16KBï¼ã«ãªã£ã¦ãã¾ãã
ãããè¸ã¾ãã¦ãELFãã¡ã¤ã«ã®å
容ãè¦ã¦ããã¾ãã
ELFãã¡ã¤ã«
åèæç®ã®ãBinary Hacks âããã«ã¼ç§ä¼ã®ãã¯ããã¯100é¸ããè¦ãªãããã£ã¦ããã¾ããå¤ãæ¬ã§ããããã®æ¬ã®ä»£ããã¯è¦å½ããã¾ããã§ããã
ELFãã¡ã¤ã«ã® ELF ã¯ããExecutable and Linking Formatãã®ç¥ã§ãå®è¡å¯è½ãã¤ããªããªãã¸ã§ã¯ããã¡ã¤ã«ãªã©ã§ä½¿ããã¦ãããã¡ã¤ã«ãã©ã¼ãããã®ãã¨ã§ãã
fileã³ãã³ãã§ELFãã¡ã¤ã«ãã©ããã確èªãããã¨ãåºæ¥ã¾ããä»åã®ãµã³ãã«ã½ã¼ã¹ã®å®è¡ãã¤ããªã対象ã«fileã³ãã³ããå®è¡ãã¦ã¿ã¾ãã
$ file stm32f4discovery_sample.elf
stm32f4discovery_sample.elf: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped
32bitããªãã«ã¨ã³ãã£ã¢ã³ï¼LSBï¼ãARMç¨ã®å®è¡å¯è½ãã¤ããªã§ããããã°æ
å ±ãæ®ã£ã¦ãã¨ããæ
å ±ãå¾ããã¾ããã
ELFãããã確èªãã
æ¥æ¬èªã§è¡¨ç¤ºãããã®ã§ãreadelf ã使ãã¾ãããELFãããã¯ãreadelfã³ãã³ãã®ãhãªãã·ã§ã³ãã§ç¢ºèªãããã¨ãåºæ¥ã¾ãã
ELFãããã¯ãELFãã¡ã¤ã«ã®ãããã§ãå¾ç¶ã®ããã°ã©ã ããããã»ã¯ã·ã§ã³ãããã®æ§é ãä½ç½®ã示ãã¦ãã¾ãã
éè¦ãªã¨ããã ã説æãã¾ãã
- å
é ã®4byteãç¹å¾´çã§ãASCIIã³ã¼ãã§ãELFããå
¥ã£ã¦ãã¾ã
- ARMç¨ã®å®è¡å¯è½ãã¡ã¤ã«
- ã¨ã³ããªãã¤ã³ãã 0x8000cf5 ã¨ãªã£ã¦ãã¾ã
- ãã®ELFãããã®é·ãã¯52byteã¨ãªã£ã¦ãã¾ã
- ããã°ã©ã ãããã®å§ç¹ã52byteãªã®ã§ãELFãããã®å¾ã«ããã°ã©ã ããããç¶ãã¦ãããã¨ãåããã¾ã
- ããã°ã©ã ãããã®é·ãã¯32byteã§3åï¼32Ã3=96byteï¼ã¨ãªã£ã¦ãã¾ã
- ã»ã¯ã·ã§ã³ãããã®é·ãã¯40byteã§26åï¼40Ã26=1040byteï¼ã¨ãªã£ã¦ãã¾ã
$ readelf -h stm32f4discovery_sample.elf
ELF ããã:
ãã¸ãã¯: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
ã¯ã©ã¹: ELF32
ãã¼ã¿: 2 ã®è£æ°ããªãã«ã¨ã³ãã£ã¢ã³
Version: 1 (current)
OS/ABI: UNIX - System V
ABI ãã¼ã¸ã§ã³: 0
å: EXEC (å®è¡å¯è½ãã¡ã¤ã«)
ãã·ã³: ARM
ãã¼ã¸ã§ã³: 0x1
ã¨ã³ããªãã¤ã³ãã¢ãã¬ã¹: 0x8000cf5
ããã°ã©ã ãããå§ç¹: 52 (ãã¤ã)
ã»ã¯ã·ã§ã³ãããå§ç¹: 342284 (ãã¤ã)
ãã©ã°: 0x5000200, Version5 EABI, soft-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 3
Size of section headers: 40 (bytes)
Number of section headers: 26
Section header string table index: 25
ELFãããã®é·ãã¯52byteã¨ãªã£ã¦ãã¾ãããã¤ããªã¨ãã£ã¿ã§éãã¦ãELFãããã®é¨åãé¸æããã¨ããã§ãã
ããã°ã©ã ããã
ããã°ã©ã ãããã¯ãåããã°ã©ã ãã©ã®ã¡ã¢ãªã¢ãã¬ã¹ã«ãã¼ããããã®æ
å ±ã示ãã¦ãã¾ãã
ããã°ã©ã ãããã¯ãreadelfã³ãã³ãã®ãlãªãã·ã§ã³ãã§ç¢ºèªãããã¨ãåºæ¥ã¾ãã
3ã¤ã®ããã°ã©ã ã®æ§æã«ãªã£ã¦ããããã§ããæåã TEXTã»ã¯ã·ã§ã³ï¼å½ä»¤ãROMï¼ã§ã2çªç®ã DATAãBSSã»ã¯ã·ã§ã³ï¼RAMï¼ã§ã3çªç®ã¯ã¹ã¿ãã¯é åï¼RAMï¼ã«ãªã£ã¦ãã¾ãã
- ãªãã»ããï¼ãã®ELFãã¡ã¤ã«å
ã®éå§ä½ç½®ã示ãã¦ãã¾ã
- ä»®æ³ã¢ãã¬ã¹ï¼å®è¡æã®ã¡ã¢ãªã¢ãã¬ã¹
- ç©çã¢ãã¬ã¹ï¼ãã¼ãããã¡ã¢ãªã¢ãã¬ã¹
- ãã¡ã¤ã«ãµã¤ãºï¼ãã®ELFãã¡ã¤ã«ã®æ¶è²»ãã¦ãããµã¤ãºï¼ROMãµã¤ãºï¼
- ã¡ã¢ãªãµã¤ãºï¼ã¿ã¼ã²ããã®æ¶è²»ãããµã¤ãºï¼ï¼RAMãµã¤ãºï¼
ä¸å±¤ã¢ãã¬ã¹ã¨ç©çã¢ãã¬ã¹ãåããã«ããã§ããããªã³ã«ã®ããã¥ã¢ã«ã«ããã¨ããã®2ã¤ã®ã¢ãã¬ã¹ã¯é常åãã«ãªãããdataã»ã¯ã·ã§ã³ã§ã¯ç°ãªãå¤ãå
¥ãã¨ã®ãã¨ã§ãã
dataã»ã¯ã·ã§ã³ã¯ãåæå¤ä»ãã®ã°ãã¼ãã«å¤æ°ã®åæå¤ãæ ¼ç´ããé åã§ããå®è¡æï¼ã¹ã¿ã¼ãã¢ããã«ã¼ãã³å®è¡æï¼ã«ãROMããåæå¤ãèªã¿ã ãã¦ãRAMï¼dataã»ã¯ã·ã§ã³ï¼ã«ã³ãã¼ãã¾ãã
ãã®ROMå´ã®ã¢ãã¬ã¹ãç©çã¢ãã¬ã¹ï¼ãã¼ãããã¢ãã¬ã¹ï¼ã§ãRAMå´ã®ã¢ãã¬ã¹ãä»®æ³ã¢ãã¬ã¹ï¼å®è¡æã®ã¢ãã¬ã¹ï¼ãæ ¼ç´ãã¦ããã¨ã®ãã¨ã§ãã
ELFãã¡ã¤ã«ã¨ä¸ç·ã«çæããããããããã¡ã¤ã«ï¼stm32f4discovery_sample.mapï¼ãè¦ãã¨ãå½ä»¤ãæ ¼ç´ããã¦ããTEXTã»ã¯ãã·ã§ã³é¨å㯠0x08000000-0x08002AF8 ã¾ã§ã§ãDATAã»ã¯ã·ã§ã³é¨åã¯ã0x20000000-0x20000074 ã§ãBSSã»ã¯ã·ã§ã³ã¯ãã®ç¶ãã§ã0x20000168 ã¾ã§ç¶ãã¦ãã¾ããã
ãã¨ã¯ãã¹ã¿ãã¯é åã§ãã16KB ã® SRAM ã®å¾ãã®æ¹ã使ã£ã¦ããããã§ãã
$ readelf -l stm32f4discovery_sample.elf
Elf ãã¡ã¤ã«ã¿ã¤ã㯠EXEC (å®è¡å¯è½ãã¡ã¤ã«) ã§ã
ã¨ã³ããªãã¤ã³ã 0x8000cf5
There are 3 program headers, starting at offset 52
ããã°ã©ã ããã:
ã¿ã¤ã ãªãã»ãã ä»®æ³Addr ç©çAddr FileSiz MemSiz Flg Align
LOAD 0x010000 0x08000000 0x08000000 0x02af8 0x02af8 RWE 0x10000
LOAD 0x020000 0x20000000 0x08002af8 0x00074 0x00168 RW 0x10000
LOAD 0x00f700 0x2001f700 0x2001f700 0x00000 0x00100 RW 0x10000
ã»ã°ã¡ã³ããããã³ã°ã¸ã®ã»ã¯ã·ã§ã³:
ã»ã°ã¡ã³ãã»ã¯ã·ã§ã³...
00 .isr_vector .text .rodata .init_array .fini_array
01 .data .bss
02 ._user_heap_stack
ããã°ã©ã ãããã®é·ã㯠96byte ã¨ãªã£ã¦ãã¾ãããã¤ããªã¨ãã£ã¿ã§éãã¦ãããã°ã©ã ãããã®é¨åãé¸æããã¨ããã§ãã
å®éã«ãELFãã¡ã¤ã«ã® TEXTã»ã¯ã·ã§ã³ãè¦ã¦ã¿ããã¨æãã¾ãã
ããã°ã©ã ãããã®æåã®é åã TEXTã»ã¯ã·ã§ã³ã§ãããªãã»ãã㯠0x10000 ã¨ãªã£ã¦ãã¾ããã¤ã¾ããELFãã¡ã¤ã«ã®å
é ãã 0x10000 ã®ä½ç½®ã« TEXTã»ã¯ã·ã§ã³ãåå¨ãã¦ããã¯ãã§ãã
ã§ã¯ãTEXTã»ã¯ã·ã§ã³ã«ã¯ãã©ã®ãããªãã¼ã¿ãæ ¼ç´ããã¦ããã®ã§ããããã
ãªãã¡ã¬ã³ã¹ããã¥ã¢ã«ã®ã2.4 ãã¼ãè¨å®ãã«ããã¨ãBOOTãã³ã«ãã£ã¦ã0x00000000 ã«ã¨ã¤ãªã¢ã¹ãããã¡ã¢ãªãå¤æ´ãããã¨ãåºæ¥ãã¨ããã¾ããé常ã¯ãFlashã¡ã¢ãªã§ãã
ããã¦ããªã»ããæã0x00000000 ããã¹ã¿ãã¯ã¢ãã¬ã¹ã SPã¬ã¸ã¹ã¿ã«ãã¼ããã¦ã0x00000004 ããå®è¡ããã¢ãã¬ã¹ï¼ãªã»ãããã³ãã©ï¼ãåå¾ãã¦å®è¡ãéå§ããã¨ããã¾ãã
ã¤ã¾ããTEXTã»ã¯ã·ã§ã³ã®æåã® 4byte ã¯ã¹ã¿ãã¯ã¢ãã¬ã¹ã§ã次㮠4byte ãªã»ãããã³ãã©ã®ã¢ãã¬ã¹ãæ ¼ç´ããã¦ãããã¨ã«ãªãã¾ãã
ããã§ã¯ãå®éã«ãã¤ããªã¨ãã£ã¿ã§ãELFãã¡ã¤ã«ã®å
é ãã 0x10000 ã®ä½ç½®ãè¦ã¦ã¿ã¾ãã
å
é ã® 4byte ã¯ã¹ã¿ãã¯ã¢ãã¬ã¹ã§ã0x20020000 ã¨ãªã£ã¦ãã¾ãã次㮠4byte ã¯ãªã»ãããã³ãã©ã®ã¢ãã¬ã¹ã¯ 0x08000CF5 ã¨ãªã£ã¦ãã¾ãã
ããã°ã©ãã³ã°ããã¥ã¢ã«ã®ã2.3.4 ãã¯ã¿ã»ãã¼ãã«ãã«ããã¨ããã³ãã©ã Thumbã³ã¼ãã®å ´åã¯æä¸ä½ãããã 1 ã«ããå¿
è¦ãããã¨ããã¾ãããã£ã¦ããªã»ãããã³ãã©ã®ã¢ãã¬ã¹ã¯ 0x08000CF4 ã¨ãããã¨ã«ãªãã¾ãã
ã¡ãã㨠TEXTã»ã¯ã·ã§ã³ã®ãã¼ã¿ãæ ¼ç´ããã¦ãã¾ããã
次ã¯ãå®éã«ããããã¬ã§ãªã»ãããã³ãã©ã®å
é ã§ãã¬ã¼ã¯ãã¦ãPCï¼ããã°ã©ã ã«ã¦ã³ã¿ï¼ã確èªãã¦ã¿ã¾ããããã¨ã確ãã«ããªã»ãããã³ãã©ã®ã¢ãã¬ã¹ã¯ 0x08000CF4 ã§ãããã¹ãããªã§ãï¼ç¬ï¼ã
ä¸å¿ã2çªç®ã®RAMã®ã»ã¯ã·ã§ã³ãè¦ã¦ã¿ã¾ãããµã¤ãºã¯ 0x74 ã§ãã°ãã¼ãã«å¤æ°ã®åæå¤ãå
¥ã£ã¦ããã¨æãã¾ãï¼å
·ä½çãªå¤ã¯åããã¾ããï¼ããããè¶
ããã¨ããã«ã¯ãä½ãå¥ã®ãã®ãå
¥ã£ã¦ãããã§ãã
3çªç®ã®ã¹ã¿ãã¯ã®é åãè¦ã¦ã¿ã¾ããããFileSiz ã 0 ãªã®ã§ãä½ãå
¥ã£ã¦ãªãã¯ãã§ãå®é㯠0 ã§ããã
ã»ã¯ã·ã§ã³ããã
ã»ã¯ã·ã§ã³ãããã¯ãåã»ã¯ã·ã§ã³ã®æ
å ±ï¼ã¢ãã¬ã¹ããµã¤ãºãã¢ã©ã¤ã¡ã³ããªã©ï¼ãæ ¼ç´ããã¦ãã¾ãã
ã»ã¯ã·ã§ã³ãããã¯ãreadelfã³ãã³ãã®ãSãªãã·ã§ã³ãã§ç¢ºèªãããã¨ãåºæ¥ã¾ãã
ã»ã¯ã·ã§ã³åãã¿ã¤ããéå§ã¢ãã¬ã¹ããã¡ã¤ã«å
ã®ãªãã»ããããµã¤ãºãå種ãã©ã°ã確èªã§ãã¾ãã
$ readelf -S stm32f4discovery_sample.elf
There are 26 section headers, starting at offset 0x5390c:
ã»ã¯ã·ã§ã³ããã:
[çª] åå ã¿ã¤ã ã¢ãã¬ã¹ Off ãµã¤ãº ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .isr_vector PROGBITS 08000000 010000 000188 00 A 0 0 4
[ 2] .text PROGBITS 080001c0 0101c0 00284c 00 AX 0 0 64
[ 3] .rodata PROGBITS 08002a0c 012a0c 0000e4 00 A 0 0 4
[ 4] .ARM.extab PROGBITS 08002af0 020074 000000 00 W 0 0 1
[ 5] .ARM PROGBITS 08002af0 020074 000000 00 W 0 0 1
[ 6] .preinit_array PREINIT_ARRAY 08002af0 020074 000000 04 WA 0 0 1
[ 7] .init_array INIT_ARRAY 08002af0 012af0 000004 04 WA 0 0 4
[ 8] .fini_array FINI_ARRAY 08002af4 012af4 000004 04 WA 0 0 4
[ 9] .data PROGBITS 20000000 020000 000074 00 WA 0 0 4
[10] .bss NOBITS 20000074 020074 0000f4 00 WA 0 0 4
[11] ._user_heap_stack NOBITS 2001f700 02f700 000100 00 WA 0 0 1
[12] .ARM.attributes ARM_ATTRIBUTES 00000000 020074 00002a 00 0 0 1
[13] .comment PROGBITS 00000000 02009e 000033 01 MS 0 0 1
[14] .debug_info PROGBITS 00000000 0200d1 013a83 00 0 0 1
[15] .debug_abbrev PROGBITS 00000000 033b54 003dc1 00 0 0 1
[16] .debug_aranges PROGBITS 00000000 037918 0004a0 00 0 0 8
[17] .debug_line PROGBITS 00000000 037db8 0069ff 00 0 0 1
[18] .debug_str PROGBITS 00000000 03e7b7 008d4f 01 MS 0 0 1
[19] .debug_loc PROGBITS 00000000 047506 0064d7 00 0 0 1
[20] .debug_frame PROGBITS 00000000 04d9e0 000e38 00 0 0 4
[21] .debug_ranges PROGBITS 00000000 04e818 001130 00 0 0 1
[22] .debug_macro PROGBITS 00000000 04f948 001d10 00 0 0 1
[23] .symtab SYMTAB 00000000 051658 001850 10 24 256 4
[24] .strtab STRTAB 00000000 052ea8 00094d 00 0 0 1
[25] .shstrtab STRTAB 00000000 0537f5 000115 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
D (mbind), y (purecode), p (processor specific)
ãããã«
ä»åã¯ãå®è¡å¯è½ãã¡ã¤ã«ã®ELFãã¡ã¤ã«ã®å
容ãè¦ã¦ã¿ã¾ãããããã°ã©ã æ¬ä½ããã¼ã¿ä»¥å¤ã«ãããããã®æ
å ±ã§ç®¡çããã¦ãããã¨ãåããã¾ããã
次åã¯ãELFãã¡ã¤ã«ããã¤ããªãã¡ã¤ã«ã«å¤æãããããã®éã®ãã¤ããªãã¡ã¤ã«ãELFãã¡ã¤ã«ã«å¤æããããã¦ã¿ããã¨æãã¾ãã
æå¾ã«ãªãã¾ããããã¨ã³ã¸ãã¢ã°ã«ã¼ãã®ã©ã³ãã³ã°ã«åå ä¸ã§ãã
æ°æ¥½ã«ãããã¨ãããããé¡ããããã¾ãð
ä»åã¯ä»¥ä¸ã§ãï¼
æå¾ã¾ã§ãèªã¿ããã ãããããã¨ããããã¾ããã