C:咋在这种情况下改变输出顺序( 二 )

C:咋在这种情况下改变输出顺序

另外调试的时候发现了编译器好奇葩的一点.明明c()函数是有副作用的,在开启了O1或O2下他喵的居然就直接给cut掉了...什么都没了...关闭了内联函数就只剩下个ret(这算是bug嘛?不过嘛,黑科技都用上了就不要对编译器强求太多啦)...情何以堪啊...还是写内联汇编安全...================================另外一种逗逼做法, @汪芃在没有stdlib.h下没法办退出...#include \u0026lt;stdio.h\u0026gt; void a(); void b(); void c(); //函数原型int main() { a(); printf("\"); return 0; } //mainvoid a() { b(); printf("one "); }void b() { c(); printf("two "); }void c() {\tint x;\t// 在此处加代码\ttypedef void(*func)(void);\ttypedef unsigned char byte;\tbyte buffer_a;\tbyte buffer_b;\tint index = 0;\tbyte *pa_code = (byte*)a;\tbyte *pb_code = (byte*)b;\tfunc fa = (func)\u0026amp;buffer_a, fb = (func)\u0026amp;buffer_b;\twhile (*pa_code != 0xc3)\t{\t\tif (*pa_code == 0xe8)\t\tfor (int i = 0; i \u0026lt; 5; i++)\t\t{\t\t\tbuffer_a = 0x90;\t\t\tpa_code++;\t\t} //用nop替换call b\t\tbuffer_a = *(pa_code++);\t}\tbuffer_a = 0xc3;\tindex = 0;\twhile (*pb_code != 0xc3)\t{\t\tif (*pb_code == 0xe8)\t\tfor (int i = 0; i \u0026lt; 5; i++)\t\t{\t\t\tbuffer_b = 0x90;\t\t\tpb_code++;\t\t} //用nop替换call c\t\tbuffer_b = *(pb_code++);\t}\tbuffer_b = 0xc3;\tfa();\tfb();\tvolatile int i = *(int *)0; //exit(0); 暴力退出,搞个大新闻}把a,b拷出来把a调用b和b调用c给换掉.不过要求关闭内联函数编译选项和链接时的数据执行保护(DEP)选项(/NXCOMPAT:NO)...这真逗...还有...话说怎么退出啊啊啊C:咋在这种情况下改变输出顺序
【C:咋在这种情况下改变输出顺序】


推荐阅读