herm1t LIVE!ng room [entries|archive|friends|userinfo]
herm1t

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

GCC [Jul. 25th, 2014|02:52 pm]
[Tags|, ]

-B. --no-integrated-cpp давно уже хотел, но только теперь дошли руки. Ж-)
LinkLeave a comment

IN in C [May. 14th, 2013|02:21 pm]
[Tags|, , , , , , ]

оператор IN в C своими руками.
LinkLeave a comment

Будни извращенцев-3 [Oct. 12th, 2009|04:37 pm]
[Tags|, ]

Объявил обработчик сигнала, как (int, struct sigcontext*), два часа из-за звёздочки промучался, потом ещё gcc решил поморочить голову, он же, сука умный, он же решил, что раз структура передается по значению, то всё что модифицирует её содержимое можно просто дропнуть. Добавил volatile...
Link2 comments|Leave a comment

Будни извращенцев-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 | most recent entries ]