引き続き不具合修正中

現象

  • 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