herm1t LIVE!ng room - June 9th, 2009 [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

June 9th, 2009

Будни извращенцев-2 [Jun. 9th, 2009|01:24 pm]
[Tags|, ]

Иногда просто зарубает на абсолютно дурацких пустяках. А компилятор между тем противиться насилию над собой, с 4.1, эта фича вылилась в вот такой код:
 80483c0:       81 ff ef be ad de       cmp    $0xdeadbeef,%edi
 80483c6:       74 18                   je     80483e0
 80483c8:       b8 e0 83 04 08          mov    $0x80483e0,%eax
 80483cd:       83 ec 0c                sub   $0xc,%esp
 80483d0:       2d 74 80 04 08          sub    $0x8048074,%eax
 80483d5:       01 f8                   add    %edi,%eax
 80483d7:       50                      push   %eax
 80483d8:       e8 8a 00 00 00          call   8048467 <jmp.2859>
 80483dd:       83 c4 0c                add   $0xc,%esp
 80483e0:
Решение для 4.1 (ключевого слова asm не избежать Ж-):
void __attribute__((noinline,stdcall)) jmp(uint32_t addr) {
  *(volatile uint32_t*)(&addr - 1) = addr;
}
extern void L;
jmp(nloc + (uint32_t)&L - (uint32_t)&virus_start); asm ("L:");
LinkLeave a comment

navigation
[ viewing | June 9th, 2009 ]
[ go | Previous Day|Next Day ]