我正在尝试将一个 C 程序与一个用 nasm 组装的对象链接起来,该对象使用 sys_newstat 系统调用来获取文件的大小。该程序在使用 gcc 编译时返回正确的文件大小,但在 mexified 时仅返回文件大小为 0。
这是汇编程序:
default rel
global getSize
sys_newstat equ 106
struc STAT
.st_dev: resd 1
.st_ino: resd 1
.st_mode: resw 1
.st_nlink: resw 1
.st_uid: resw 1
.st_gid: resw 1
.st_rdev: resd 1
.st_size: resd 1
.st_blksize: resd 1
.st_blocks: resd 1
.st_atime: resd 1
.st_atime_nsec: resd 1
.st_mtime: resd 1
.st_mtime_nsec: resd 1
.st_ctime: resd 1
.st_ctime_nsec: resd 1
.unused4: resd 1
.unused5: resd 1
endstruc
%define sizeof(x) x %+ _size
section .data
fileName: db "input.xml",0
section .bss
stat: resb sizeof(STAT)
section .text
getSize:
;; Get the size of the file
mov rbx, fileName
mov rcx, stat
mov rax, sys_newstat
int 80H
mov rax, [stat + STAT.st_size]
ret
这是C程序:
#include <stdio.h>
#include "mex.h"
extern int getSize();
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
int size = getSize();
printf("%d \n", size);
}
这是我用来编译汇编程序的命令:
nasm -felf64 -o getSize.o getSize.asm
这是我用来混合我的 C 程序的命令:
mex main.c getSize.o
所有帮助将不胜感激。谢谢你