2013. 4. 4. 16:30

메모리 출력(memory dumper, memory print) 공유

메모리를 출력하는 코드를 공유합니다.
디버깅시 사용하면 좋겠죠?
int _tmain(int argc, _TCHAR* argv[])
{
	int i = 0;
	char ppp[1000] = {0,};

	for (i=0; i<1000; i++)
	{
		ppp[i] = i%255;
	}

	DUMP_MEMORY(ppp, 50);
	return 0;
}
와 같이 호출하면 다음과 같이 메모리가 출력됩니다.
Addr = 0x19f6e8
[00000] 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  ................
[00010] 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
[00020] 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
[00030] 30 31                                            01
DUMP_MEMORY 함수는 다음과 같습니다.
VOID DUMP_MEMORY(IN char* p, IN INT nSize)
{
	INT	i		= 0;
	INT	j		= 0;
	INT	t		= 0;
	INT	l		= 0;
	CHAR	szLine[17]	= {0,};

	if (NULL == p)
	{
		return;
	}

	printf("Addr = 0x%x\r\n", p);
	for (i=0; i<(nSize + 15) / 16; i++)
	{
		t = i * 16;
		if (t > nSize)
		{
			t = nSize;
		}

		fprintf(stdout, "[%.5X] ", i*16);

		l = 0;
		for (j=i*16; j<(i+1)*16; j++)
		{
			if (j>=nSize)
			{
				fprintf(stdout, "   ");
				szLine[l] = ' ';
			}
			else
			{
				fprintf(stdout, "%0.2X ", (unsigned char)p[j]);
				if ((32 <= p[j]) && (p[j] <= 127))
				{
					szLine[l] = p[j];
				}
				else
				{
					szLine[l] = '.';
				}
			}
			l++;
		}

		fprintf(stdout, " %s\r\n", szLine);
	}
}