1. C++ / Говнокод #17194

    +50

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    size_t __stdcall ZAsmView::addrSet(DIS const *pDis, unsigned __int64 Va, wchar_t * buf, size_t cb, unsigned __int64 * displacement)
    {
    	FORMATDATA* pf = (FORMATDATA*)pDis->PvClient();
    	size_t fixupLen = pf->fixupLen;
    	pf->fixupLen = 0;
    	*displacement = 0;
    	BOOL f = TRUE;
    	PVOID _Va = (PVOID)Va;
    	ZDbgDoc* pDoc = pf->pDoc;
    	
    __loop:
    	if (PCSTR Name = pDoc->getNameByVa((PVOID)Va))
    	{
    		char cc[256];
    		PCSTR fName = unDNameEx(cc, Name, sizeof(cc), UNDNAME_NAME_ONLY);
    		int len = _snwprintf(buf, cb, L"%S(%p)", fName, Va);
    		if (len < 0)
    		{
    			buf[len = (DWORD)cb - 1] = 0;
    		}
    		else
    		{
    			buf[0] |= 0x4000, buf[len - 3 - 2*sizeof(PVOID)] |= 0x8000;
    		}
    		return len;
    	}
    
    	if (f && 2*sizeof(PVOID)+2<cb)
    	{
    		switch (pDis->Trmta())
    		{
    		case DIS::a_jmp_u_2:
    		case DIS::a_jmp_u_5:
    		case DIS::a_jmp_c_2:
    		case DIS::a_jmp_c_6:
    			_snwprintf(buf, cb, L"%p %c", (PVOID)Va, Va > pf->pLI->Va ? 0x2193 : 0x2191);
    			buf[0] |= 0x4000, buf[2*sizeof(PVOID)-1] |= 0x8000;
    			return 2*sizeof(PVOID)+2;
    		}
    	}
    
    	if (fixupLen)
    	{
    		if (0 <= pDoc->Read((PVOID)Va, &Va, sizeof(PVOID)))
    		{
    			fixupLen = 0, f = FALSE;
    			goto __loop;
    		}
    	}
    
    	if (2*sizeof(PVOID)+2<cb && pDoc->getDllByVaNoRef(_Va))
    	{
    		_snwprintf(buf, cb, L"%p", _Va);
    		buf[0] |= 0x4000, buf[2*sizeof(PVOID)-1] |= 0x8000;
    		return 2*sizeof(PVOID);
    	}
    
    	return 0;
    }

    Запостил: zhukas, 27 Ноября 2014

    Комментарии (3) RSS

    Добавить комментарий