首页 > 其他 > 详细

关于不能调用 gcc 生成的 .o 问题总结 (我调用了一个AES.C没问题)

时间:2021-01-17 23:38:28      阅读:35      评论:0      收藏:0      [点我收藏+]

关于不能调用 gcc 生成的 .o 问题总结 (我调用了一个AES.C没问题)
本贴代码中多处用了类似
switch(length)

编译方法
gcc -m32 -s -Wall -O2 -c main.c -o gcc32.o
gcc -m64 -s -Wall -O2 -c main.c -o gcc64.o
源代码 关键 [color=#7FFF00]switch[/color]

uint32_t __cdecl set(uint32_t a,SqList* b)
{
  int i;
  i = 0;

   switch(a)
        {
                case 0:{ 
                        b->a0 = 1;
                        i = 0;
                        break;}
                case 1:{ 
                        b->a1 = 1;
                        i = 1;
                        break;}
                case 2:{ 
                        b->a2 = 1;
                        i = 2;
                        break;}
                case 3:{ 
                        b->a3 = 1;
                        i = 3;
                        break;}
                case 4: { 
                        b->b0 = 1;
                        i = 4;
                        break;}
                case 5:{ 
                        b->b1 = 1;
                        i = 5;
                        break;}
                case 6:{ 
                        b->b2 = 1;
                        i = 6;
                        break;}
                case 7:{ 
                        b->b3 = 1;
                        i = 7;
                        break;}
             //   default:printf("error");;
        }
    return i;
}

Delphi连接后运行 汇编

0060E47B 64668D4000       lea ax,[eax+$00]
set_gcc:
0060E480 8B442404         mov eax,[esp+$04]
0060E484 8B542408         mov edx,[esp+$08]
0060E488 83F807           cmp eax,$07
0060E48B 0F87CF000000     jnbe $0060e560

0060E491 FF248500000000 jmp dword ptr [eax*4+$0000] 红色部分Delphi并未处理好偏移 或许是标准不一样导致不认识
0060E498 8DB42600000000 lea esi,[esi+$0000]

gcc生成汇编文件

_set:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$16, %esp
	movl	$0, -4(%ebp)
	cmpl	$7, 8(%ebp)
	ja	L2
	movl	8(%ebp), %eax
	sall	$2, %eax
	addl	$L4, %eax
	movl	(%eax), %eax
	jmp	*%eax
	.section .rdata,"dr"
	.align 4

关于不能调用 gcc 生成的 .o 问题总结 (我调用了一个AES.C没问题)

原文:https://www.cnblogs.com/marklove/p/14290443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!