引き続き不具合修正中
現象
- upperを起動すると死ぬ
- 再現率100%
現時点で分かっていること
- monapi_stdout_write の中で死んでいる
- _logprintfを利用して細かいログをとった結果分かったことは
- access denied.address = 0x354748D4 Process UPPER.EX5 killed eip=0xA001089F
- memcpy((void*)((uint32_t)memoryAddress_ + memorySize), buffer, size); の dst address が 0x354748D4 になっている。これがアクセス違反。
- ちなみに memorySize = 0x45474948, memoryAddress_=0xEFFFFF8Cなのでどちらも激しく間違っている
- memorySize_ は header->size
- memoryAddress_ は MemoryMapされたアドレス
- Streamの初期化処理を通ってない?(変数が初期化すらされていない感じ)
- 実際ログ見てみたらどうかな?
- initializeFromHandle を通っている
- その時点では headerは正しいところを示している
- initializeFromHandle から Write までの間に header_ がおかしくなる
- さてどこだろうね。
- 分かった.2重初期化が問題だ。
- invokeFuncListが2回呼ばれている
- monapi dllmain
- monapi_initialize_memory(64 * 1024 * 1024);
- monalib dllmain
- inStream = MonAPI::Stream::FromHandle(handle);
- outStream = MonAPI::Stream::FromHandle(handle);
- monapi crt