| 692 | } |
| 693 | |
| 694 | template<typename T> T WinDebugger::ReadMemory(intptr addr, bool local, bool* failed) |
| 695 | { |
| 696 | bool success = true; |
| 697 | T val; |
| 698 | memset(&val, 0, sizeof(T)); |
| 699 | if (local) |
| 700 | { |
| 701 | if (addr != 0) |
| 702 | { |
| 703 | memcpy(&val, (void*)(intptr)addr, sizeof(T)); |
| 704 | /*__try |
| 705 | { |
| 706 | memcpy(&val, (void*)(intptr)addr, sizeof(T)); |
| 707 | } |
| 708 | __except (EXCEPTION_EXECUTE_HANDLER) |
| 709 | { |
| 710 | success = false; |
| 711 | }*/ |
| 712 | } |
| 713 | else |
| 714 | success = false; |
| 715 | } |
| 716 | else |
| 717 | { |
| 718 | //SIZE_T dwReadBytes; |
| 719 | memset(&val, 0, sizeof(T)); |
| 720 | //success = ReadProcessMemory(mProcessInfo.hProcess, (void*)(intptr)addr, &val, (SIZE_T)sizeof(T), &dwReadBytes) != 0; |
| 721 | success = ReadMemory(addr, (int)sizeof(T), &val); |
| 722 | } |
| 723 | |
| 724 | if (failed != NULL) |
| 725 | *failed = !success; |
| 726 | return val; |
| 727 | } |
| 728 | |
| 729 | addr_target DecodeTargetDataPtr(const char*& strRef); |
| 730 |
no outgoing calls
no test coverage detected