无法在汇编中链接C ++函数

frgr

抱歉,是否还有其他类似问题,但我尝试了几乎所有尝试,但均未取得结果。

我有一个汇编文件,调用了cpp文件的主要功能(我正在创建内核条目)

内核

[bits 32]
[extern _main]

jmp _main
cli
hlt

main.cpp

void a()
{
    //a
}
void bc()
{
    //bc
}
extern "C" int main()
{
    return 0;
}

生成文件

all: kes.o ke.o ke1.tmp otp.txt

kes.o : kerne.asm
    nasm -f win32 -o H:\x86f\lkt\kes.o H:\x86f\lkt\kerne.asm   

ke.o : main.cpp
    g++ -Wall -m32 -g -std=c++14 -std=c++1y  -ffreestanding -nostartfiles -c main.cpp -o ke.o 

ke1.tmp : kes.o ke.o
    ld -m i386pe -r -o ke1.tmp -Ttext 0x1000 kes.o ke.o


otp.txt : ke1.tmp
    objdump -d ke1.tmp > otp.txt

otp.txt输出

ke1.tmp:     file format pe-i386


Disassembly of section .text:

00001000 <.text>:
    1000:   e9 00 00 00 00          jmp    1005 <.text+0x5>
    1005:   ee                      out    %al,(%dx)
    1006:   77 90                   ja     f98 <@feat.00+0xf97>

00001008 <__Z1av>:
    1008:   55                      push   %ebp
    1009:   89 e5                   mov    %esp,%ebp
    100b:   90                      nop
    100c:   5d                      pop    %ebp
    100d:   c3                      ret    

0000100e <__Z2bcv>:
    100e:   55                      push   %ebp
    100f:   89 e5                   mov    %esp,%ebp
    1011:   90                      nop
    1012:   5d                      pop    %ebp
    1013:   c3                      ret    

00001014 <_main>:
    1014:   55                      push   %ebp
    1015:   89 e5                   mov    %esp,%ebp
    1017:   83 e4 f0                and    $0xfffffff0,%esp
    101a:   e8 00 00 00 00          call   101f <_main+0xb>
    101f:   b8 00 00 00 00          mov    $0x0,%eax
    1024:   c9                      leave  
    1025:   c3                      ret    
    1026:   90                      nop
    1027:   90                      nop
    ...

在otp输出中,在1000处的指令是jmp _main istrunction。地址的显示方式无法正确解析,因此指向下一条指令(1005)。我在哪里做错了?

编辑:

纳米凯斯

00000000 a .absolut
00000000 t .text
00000001 a @feat.00
         U _main

纳米ke.o

00000000 b .bss
00000000 d .data
00000000 N .debug_abbrev
00000000 N .debug_aranges
00000000 N .debug_frame
00000000 N .debug_info
00000000 N .debug_line
00000000 r .rdata$zzz
00000000 t .text
         U ___main
00000000 T __Z1av
00000006 T __Z2bcv
0000000c T _main

objdump -r ke1.tmp

ke1.tmp:     file format pe-i386

RELOCATION RECORDS FOR [.text]:
OFFSET   TYPE              VALUE 
00000001 DISP32            _main-0x00000014
0000001b DISP32            ___main+0x00001000


RELOCATION RECORDS FOR [.debug_aranges]:
OFFSET   TYPE              VALUE 
00000006 secrel32          .debug_info
00000010 dir32             .text-0x00001008


RELOCATION RECORDS FOR [.debug_info]:
OFFSET   TYPE              VALUE 
00000006 secrel32          .debug_abbrev
00000088 dir32             .text-0x00001008
00000090 secrel32          .debug_line
000000a1 dir32             .text-0x00001008
000000c0 dir32             .text-0x00001008
000000d6 dir32             .text-0x00001008


RELOCATION RECORDS FOR [.debug_line]:
OFFSET   TYPE              VALUE 
0000003a dir32             .text-0x00001008


RELOCATION RECORDS FOR [.debug_frame]:
OFFSET   TYPE              VALUE 
00000018 secrel32          .debug_frame
0000001c dir32             .text-0x00001008
00000038 secrel32          .debug_frame
0000003c dir32             .text-0x00001008
00000058 secrel32          .debug_frame
0000005c dir32             .text-0x00001008
零号

原因是使用该-r选项ld会生成目标文件,而不是可执行文件。在目标文件中,许多地址未设置,因为稍后将通过-r使用重定位表中的数据进行最终链接(无)来设置它们

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 c 链接和调用汇编函数

来自分类Dev

链接并编译汇编函数

来自分类Dev

如何从汇编中调用C函数

来自分类Dev

静态链接的最近函数在C中无法正确评估

来自分类Dev

从C调用汇编函数

来自分类Dev

我的C函数的汇编代码

来自分类Dev

从C调用内联汇编函数

来自分类Dev

从C调用汇编函数

来自分类Dev

从 c 调用的汇编函数被忽略

来自分类Dev

MIPS-在汇编代码中调用C函数

来自分类Dev

在GDB中反汇编C函数。澄清GAS组装说明

来自分类Dev

带有return语句的C ++函数中的内联汇编

来自分类Dev

在反汇编Visual C ++中我的函数及其参数的名称

来自分类Dev

C 裸函数 - 在 1 个函数中执行汇编和 c 代码的灼热解决方案

来自分类Dev

C ++函数中未解决的外部链接

来自分类Dev

C中的链接列表函数参数

来自分类Dev

C ++函数中未解决的外部链接

来自分类Dev

如何在C中编写链接其他函数的函数

来自分类Dev

Erlang中的函数链接

来自分类Dev

确定汇编中函数的返回类型

来自分类Dev

在汇编器中编写函数

来自分类Dev

如何在汇编中编写交换函数?

来自分类Dev

从swift调用在汇编中定义的函数

来自分类Dev

汇编x86-调用C函数

来自分类Dev

将C ++函数转换为MIPS汇编

来自分类Dev

如何从C代码调用汇编函数?

来自分类Dev

从调用C代码汇编函数在linux

来自分类Dev

MSVC汇编函数自变量C ++与_asm

来自分类Dev

汇编x86-调用C函数