我有一个C程序,我想在外部程序集文件中访问该程序的全局变量。我该怎么做呢?使用NASM或FASM汇编程序。
示例代码:
[niko@dev1 test]$ cat cprogram.c
#include <stdio.h>
int array[1024];
void func_increment(int position_index);
int main() {
array[2]=4;
func_increment(2);
printf("val=%d\n",array[2]);
}
[niko@dev1 test]$ cat asmcode.S
use64
global func_increment
section .text
func_increment:
mov eax, array[position] <- how should I insert here the symbol located inside my C program
inc eax
ret
[niko@dev1 test]$
我在C程序中有很多类型,例如,一个声明为数组的结构类型,它长约32MB:
typedef struct buf {
char data[REQ_BUF_SIZE];
} buf_t;
我有指针,整数和许多变量类型:
char data[64] __attribute__ ((aligned (16)));
char nl[16] __attribute__ ((aligned (16)));
uint positions[32];
答案 0 :(得分:4)
就符号而言,如果它们是全局的,您可以按名称引用它们。根据汇编程序和环境,您可能必须通过在下划线前加上声明符号外部和/或对其进行修改。
使用64位linux约定和nasm语法,您的代码可能如下所示:
extern array
global func_increment
func_increment:
; as per calling convention, position_index is in rdi
; since each item is 4 bytes, you need to scale by 4
inc dword [array + 4 * rdi]
ret