GCC |
[Jul. 25th, 2014|02:52 pm] |
-B. --no-integrated-cpp давно уже хотел, но только теперь дошли руки. Ж-) |
|
|
Будни извращенцев-3 |
[Oct. 12th, 2009|04:37 pm] |
Объявил обработчик сигнала, как (int, struct sigcontext*), два часа из-за звёздочки промучался, потом ещё gcc решил поморочить голову, он же, сука умный, он же решил, что раз структура передается по значению, то всё что модифицирует её содержимое можно просто дропнуть. Добавил volatile... |
|
|
Будни извращенцев-2 |
[Jun. 9th, 2009|01:24 pm] |
Иногда просто зарубает на абсолютно дурацких пустяках. А компилятор между тем противиться насилию над собой, с 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:");
|
|
|