|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[c]Strutture
Codice:
#ifndef PAK_H
#define PAK_H
#include "include.h"
typedef char bool;
typedef struct
{
char content[PAK_N]; /* the content of pak */
bool flag[FLAG_N]; /* the pak flag */
char sign[10]; /* the verification signature */
} Pak;
/* prototype */
void setSign(Pak * ptr, const char sign[10]);
bool cntSign(Pak * ptr);
void setContent(Pak * ptr, char content[PAK_N]);
int send(Pak * ptr, int mode);
void rec(Pak * ptr, char buf[PAK_N]);
void log(char * msg);
void controlChecksum(char * ck, bool * control);
/* implementation */
void setSign(Pak * ptr, const char sign[10])
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return;
if((strlen(sign) > 10) || (strlen(sign) < 10))
return;
strcpy(ptr->sign, sign);
}
bool cntSign(Pak * ptr)
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return FALSE;
}
void setContent(Pak * ptr, char content[PAK_N])
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return;
short i;
for(i = 0; i<PAK_N; i++)
{
ptr->content[i] = content[i];
}
}
int send(Pak * ptr, int mode)
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return -1;
if(strlen(ptr->content) < PAK_N)
return -1;
setContent(ptr, ptr->content);
ptr->flag[0] = TRUE; /* the dimension OK flag */
switch(mode)
{
case SERVER:
ptr->flag[1] = SERVER; /* the pak type flag */
break;
case CLIENT:
ptr->flag[1] = CLIENT;
break;
case REQUEST:
ptr->flag[1] = REQUEST;
break;
default:
ptr->flag[1] = ERROR;
break;
}
if((ptr->flag[0] == TRUE) && (ptr->flag[1] != ERROR))
{
setSign((Pak *) ptr->sign, CHECK);
}else{
return -1;
}
/*
send to serial port
*/
return 0;
}
void rec(Pak * ptr, char buf[PAK_N])
{
/*
receive to serial port
*/
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return;
strcpy(buf, ptr->content);
}
/*
* Log Format:
* # DATE #
* # FLAG #
* # CONTENT #
*/
void log(char * msg)
{
FILE * log = fopen("app.log", "a+");
if(log == NULL)
return;
fprintf(log, "#%s#\n", msg);
fclose(log);
}
void controlChecksum(char * ck, bool * control)
{
if(strcmp(ck, CHECK) == 0)
{
control = (bool *) 0;
}else{
control = (bool *) 1;
}
}
#endif
Help me
__________________
Gnu/Linux User
Ultima modifica di Luc@s : 09-11-2003 alle 14:45. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
ap
__________________
Gnu/Linux User
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 1999
Città: Messina
Messaggi: 4358
|
A me il tuo programma compilato da una lista di errori interminabili....
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Innanzitutto non usare gli include guard (#ifndef...#define...#endif) dentro codice c (il tuo listato mi sembra codice c, non un header). Poi, non usare nomi di funzioni di sistema per le tue funzioni (tipo send e log). Infine, la tua send restituisce solo 0 oppure -1, è impossibile che ritorni -123343.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
1) Buffer overflow da qualche parte 2) Chi chiama la send chiama effettivamente la send di sistema, non quella che hai scritto tu. Cambiagli nome per evitare conflitti.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
hai ragione!
Skusa
__________________
Gnu/Linux User
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
Cancellami l'altro
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ok fuori uno
Hai altri nick o me li devo cercare da solo?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ok tornando al tuo problema: innanzitutto rimuovi i nomi di funzioni riservate (send e log) e guarda se cambia qualche cosa...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
mi da lo stesso numero
Codice:
#include "include.h"
typedef char bool;
typedef struct
{
char content[PAK_N]; /* the content of pak */
bool flag[FLAG_N]; /* the pak flag */
char sign[10]; /* the verification signature */
} Pak;
/* prototype */
void setSign(Pak * ptr, const char sign[10]);
bool cntSign(Pak * ptr);
void setContent(Pak * ptr, char content[PAK_N]);
int send_pak(Pak * ptr, short mode);
void rec_pak(Pak * ptr, char buf[PAK_N]);
void aplog(char * msg);
void controlChecksum(char * ck, bool * control);
/* implementation */
void setSign(Pak * ptr, const char sign[10])
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return;
if((strlen(sign) > 10) || (strlen(sign) < 10))
return;
strcpy(ptr->sign, sign);
}
bool cntSign(Pak * ptr)
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return FALSE;
}
void setContent(Pak * ptr, char content[PAK_N])
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return;
short i;
for(i = 0; i<PAK_N; i++)
{
ptr->content[i] = content[i];
}
}
int send_pak(Pak * ptr, short mode)
{
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return -1;
if(strlen(ptr->content)+1 < PAK_N)
return -1;
ptr->flag[0] = TRUE; /* the dimension OK flag */
switch(mode)
{
case SERVER:
ptr->flag[1] = SERVER; /* the pak type flag */
break;
case CLIENT:
ptr->flag[1] = CLIENT;
break;
case REQUEST:
ptr->flag[1] = REQUEST;
break;
default:
ptr->flag[1] = ERROR;
break;
}
if((ptr->flag[0] == TRUE) && (ptr->flag[1] != ERROR))
{
setSign((Pak *) ptr->sign, CHECK);
}else{
return -1;
}
/*
send to serial port
*/
return 0;
}
void rec_pak(Pak * ptr, char buf[PAK_N])
{
/*
receive to serial port
*/
#ifdef DEBUG
assert(ptr != NULL);
#endif
if(ptr == NULL)
return;
strcpy(buf, ptr->content);
}
/*
* Log Format:
* # DATE #
* # FLAG #
* # CONTENT #
*/
void aplog(char * msg)
{
FILE * log = fopen("app.log", "a+");
if(log == NULL)
return;
fprintf(log, "#%s#\n", msg);
fclose(log);
}
void controlChecksum(char * ck, bool * control)
{
if(strcmp(ck, CHECK) == 0)
{
control = (bool *) 0;
}else{
control = (bool *) 1;
}
}
Codice:
#include "include.h"
#include "pak.h"
extern soc_S;
int main()
{
#ifdef DEBUG
printf("Debug Mode CLIENT\n");
#endif
char sc;
time_t ltime;
do
{
Pak * p;
strcpy(p->content, "c");
int err = send_pak(p, CLIENT);
puts("\nInsert 0 to exit\n");
printf("Err: %d \n", &err);
scanf("%d", &sc);
}while(sc != 0);
return 0;
}
__________________
Gnu/Linux User
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Codice:
printf("Err: %d \n", &err);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:25.



















