Да, вы правы. Это не проблема двоичных данных, а результат pxor. Это мой тест, действительно только для моего понимания. Что ж, в системном вызове sys_write, когда я указываю% ecx в память, где хранится значение pxor xmm0 'mov -0x40 (% rbp),% ecx', тогда у меня создается файл 0 длины! Наоборот, если я укажу на большой бафф «-0x30 (% rbp)», все будет хорошо.
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include <emmintrin.h>
main(int argc, char **argv)
{
unsigned char __attribute__ ((aligned (16))) *bigbuff = (char *) malloc(16);
unsigned char __attribute__ ((aligned (16))) *buff = (char *) malloc(16);
unsigned char __attribute__ ((aligned (16))) *nome_file = (char *) malloc(16);
bigbuff="gatto sisvestr\n";
buff="micio sisvestro2";
nome_file="nuovo.txt"; //la lunghezza massima del nome è data da malloc!!!
asm (
"movdqa -0x30(%rbp), %xmm0;"
"movdqa -0x20(%rbp), %xmm1;"
"pxor %xmm1,%xmm0;"
"movdqa %xmm0,-0x40(%rbp);"
"movdqa -0x40(%rbp), %xmm2;"
"movdqa -0x20(%rbp), %xmm1;"
"pxor %xmm1,%xmm2;"
"movdqa %xmm2,-0x30(%rbp);"
"mov $8, %eax;"
"mov -0x10(%rbp),%ebx;"
"mov $448, %ecx;"
"int $0x80;"
"mov %eax, %ebx;"
"mov $4, %eax;"
"mov -0x40(%rbp), %ecx;"
"mov $14, %edx;"
"int $0x80;"
);
}