Ошибка передачи данных из символьного массива в функцию
При передаче символьного массива в функцию, переносится какая-то белиберда, причем не имеет значения, что конкретно находилось в массиве.
При получении данных в массив msg всё проходит гладко и они записываются как надо.
void * thread1(void* thread_data)
{
int cunt = counter;
int bytes = 0;
char msg[40];
while(true)
{
bytes = recv(Con[cunt], msg, 40, NULL);
if(bytes <= 0) break;
_sd(msg, cunt);
disconnect(cunt);
}
_is_free[cunt] = true;
pthread_exit(0);
}
void _sd(char msg[], int in)
{
int offset = 0;
int _flen = 0;
int _finfo[STD_FLEN+1];
int t = 0;
while(true)
{
t = _readf1024(msg, _finfo, offset, _flen);
sendfile(_finfo, _flen, in);
if(t == EOF) break;
}
}
Я проверял в дебаггере, что же конкретно не так, однако и это мне не дало толком понять, что происходит.
Ошибка происходит по адресу 000055EA4AC0068A, собственно при копировании полученных данных из массива в стек.
.text:000055EA4AC0067E public _Z3_sdPci
.text:000055EA4AC0067E _Z3_sdPci proc near ; CODE XREF: thread1(void *)+5D↓p
.text:000055EA4AC0067E
.text:000055EA4AC0067E in = dword ptr -405Ch
.text:000055EA4AC0067E msg = qword ptr -4058h
.text:000055EA4AC0067E _finfo = dword ptr -4050h
.text:000055EA4AC0067E _flen = dword ptr -48h
.text:000055EA4AC0067E offset = dword ptr -44h
.text:000055EA4AC0067E _fname = byte ptr -40h
.text:000055EA4AC0067E t = dword ptr -14h
.text:000055EA4AC0067E var_8 = qword ptr -8
.text:000055EA4AC0067E
.text:000055EA4AC0067E ; __unwind { // 55EA4ABFF000
.text:000055EA4AC0067E push rbp
.text:000055EA4AC0067F mov rbp, rsp
.text:000055EA4AC00682 push rbx
.text:000055EA4AC00683 sub rsp, 4058h
.text:000055EA4AC0068A mov [rbp+msg], rdi
.text:000055EA4AC00691 mov [rbp+in], esi
.text:000055EA4AC00697 mov rax, [rbp+msg]
.text:000055EA4AC0069E mov rcx, [rax]
.text:000055EA4AC006A1 mov rbx, [rax+8]
.text:000055EA4AC006A5 mov qword ptr [rbp+_fname], rcx
.text:000055EA4AC006A9 mov qword ptr [rbp+_fname+8], rbx
.text:000055EA4AC006AD mov rcx, [rax+10h]
.text:000055EA4AC006B1 mov rbx, [rax+18h]
.text:000055EA4AC006B5 mov qword ptr [rbp+_fname+10h], rcx
.text:000055EA4AC006B9 mov qword ptr [rbp+_fname+18h], rbx
.text:000055EA4AC006BD mov rax, [rax+20h]
.text:000055EA4AC006C1 mov qword ptr [rbp+_fname+20h], rax
.text:000055EA4AC006C5 mov [rbp+offset], 0
.text:000055EA4AC006CC mov [rbp+_flen], 0
.text:000055EA4AC006D3 mov [rbp+t], 0
.text:000055EA4AC006DA
.text:000055EA4AC006DA loc_55EA4AC006DA: ; CODE XREF: _sd(char *,int)+9A↓j
.text:000055EA4AC006DA lea rcx, [rbp+_flen] ; _flen
.text:000055EA4AC006DE lea rdx, [rbp+offset] ; offset
.text:000055EA4AC006E2 lea rsi, [rbp+_finfo] ; _finfo
.text:000055EA4AC006E9 lea rax, [rbp+_fname]
.text:000055EA4AC006ED mov rdi, rax ; _fname
.text:000055EA4AC006F0 call _Z10_readf1024PcPiRiS1_ ; _readf1024(char *,int *,int &,int &)
.text:000055EA4AC006F5 mov [rbp+t], eax
.text:000055EA4AC006F8 mov ecx, [rbp+_flen]
.text:000055EA4AC006FB mov edx, [rbp+in] ; in
.text:000055EA4AC00701 lea rax, [rbp+_finfo]
.text:000055EA4AC00708 mov esi, ecx ; _flen
.text:000055EA4AC0070A mov rdi, rax ; _finfo
.text:000055EA4AC0070D call _Z8sendfilePiii ; sendfile(int *,int,int)
.text:000055EA4AC00712 cmp [rbp+t], 0FFFFFFFFh
.text:000055EA4AC00716 jz short loc_55EA4AC0071A
.text:000055EA4AC00718 jmp short loc_55EA4AC006DA
.text:000055EA4AC0071A ; ---------------------------------------------------------------------------
.text:000055EA4AC0071A
.text:000055EA4AC0071A loc_55EA4AC0071A: ; CODE XREF: _sd(char *,int)+98↑j
.text:000055EA4AC0071A nop
.text:000055EA4AC0071B nop
.text:000055EA4AC0071C mov rbx, [rbp+var_8]
.text:000055EA4AC00720 leave
.text:000055EA4AC00721 retn
Данные, которые хранит массив (как раз rdi) msg --
00007F296241CEA0 db 74h ; t
00007F296241CEA1 db 65h ; e
00007F296241CEA2 db 73h ; s
00007F296241CEA3 db 74h ; t
00007F296241CEA4 db 2Eh ; .
00007F296241CEA5 db 65h ; e
00007F296241CEA6 db 78h ; x
00007F296241CEA7 db 65h ; e
Данные, которые копируются в стек функции _sd()
00007F2962418E28 db 0A0h
00007F2962418E29 db 0CEh
00007F2962418E2A db 41h ; A
00007F2962418E2B db 62h ; b
00007F2962418E2C db 29h ; )
00007F2962418E2D db 7Fh ;
Собственно вопрос, что конкретно я делаю не так?