1. Си / Говнокод #8802

    +137

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #define MAKEPTR(p,o) (LPVOID) ( (DWORD)p + (DWORD)o )
    #define WRITE_OPCODE(pCode, x) \
       res = WriteProcessMemory( hProcess, pCode, &x, sizeof(x), &nWritten ); \
       if( !res ) return FALSE; \
       pCode = MAKEPTR(pCode,sizeof(x))
    #define WRITE_DWORD(pCode, x) \
       res = WriteProcessMemory( hProcess, pCode, &x, sizeof(x), &nWritten ); \
       if( !res ) return FALSE; \
       pCode = MAKEPTR(pCode,sizeof(x))

    макрос "сюрприз" хоть бы назвал яснее типа
    WRITE_OPCODE_AND_RETURN_VAL_IF_FAIL
    но чем так писать лучше уж условие не прятать

    http://ospy.googlecode.com/svn/!svn/bc/2/trunk/Agent/hooking.cpp

    Запостил: 63F45EF45RB65R6VR, 12 Декабря 2011

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

    • Можно было бы, если бы у нас была целая функция из таких вот выражений, для простоты.
      BOOL WriteSequence(DWORD dwOffset)
      {
      WRITE_OPCODE(dwOffset, 0x69);
      WRITE_DWORD(dwOffset, 0x80000001);
      WRITE_OPCODE(dwOffset, 0xС0);
      WRITE_OPCODE(dwOffset, 0x63);
      WRITE_DWORD(dwOffset, 0xFFFFFFFF);
      WRITE_OPCODE(dwOffset, 0x63);
      WRITE_DWORD(dwOffset, 0xFFFFFFFF);
      return TRUE;
      }
      Но это явно не тот случай.
      Ответить
      • for (;;)
        Ответить
      • ну даже в рамках чистого си можно было бы сделать яснее

        BOOL WriteSequence(DWORD dwOffset)
        {
        	if (setjmp(jbuf))
        	{
        		cleanup();
        		return FALSE
        	}
        
        	WRITE_OPCODE(dwOffset, 0x69);
        	WRITE_DWORD(dwOffset, 0x80000001);
        	WRITE_OPCODE(dwOffset, 0xС0);
        	WRITE_OPCODE(dwOffset, 0x63);
        	WRITE_DWORD(dwOffset, 0xFFFFFFFF);
        	WRITE_OPCODE(dwOffset, 0x63);
        	WRITE_DWORD(dwOffset, 0xFFFFFFFF);
        
        	cleanup();	
        	return TRUE;
        }


        а WRITE_OPCODE, WRITE_DWORD сделать функциями с longjmp и имхо глядя
        на эту функцию все очень прозрачно в отличии от условия спрятанного в макрос
        Ответить
    • Пилять, самомодофикация?!
      Ответить
      • Я тоже считаю, что автор мудак.
        кг / ам, вообщем.
        Ответить
    • А если платформа 64-битная?
      Ответить
    • показать все, что скрытоvanished
      Ответить

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