Problema com a leitura de arquivo

Boa noite pessoal. Então estou fazendo um montador de dois passos, então eu tenho que carregar um arquivo no formato .a e montar um arquivo no formato .mif, só quando eu faço o primeiro passo pra salvar os endereços das “sub-rotinas” o arquivo abre, copia os labels, endereça de acordo com a arquitetura e o arquivo passado, porem quando chega no final do arquivo ele não sai do while e no terminal me aparece o seguinte erro: *** stack smashing detected ***: terminated. O estranho é que eu testei com um arquivo .txt e esse erro não acontece. Se alguém puder ajudar agradeço. Segue o código abaixo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Endereco{
  char endereco[100];
  char binario[10];
} Endereco;

//Subrotinas
void PrimeiroPasso(char arquivo[], Endereco enderecos[]);
void ConvertDecimalToBinario(int num, char endereco[10]);
void ConvertDecimalToHexadecimal(int num, char endereco[2]);

//Função Principal
int main(int argc, char const *argv[]) {
  FILE *pFile;
  char arquivo[100];
  Endereco enderecos[64];
  printf("%ld\n", sizeof(enderecos)/sizeof(enderecos[0]));
  printf("Informe o arquivo que desejar traduzir: ");
  scanf(" %[^\n]s", arquivo);
  while(1){
    pFile = fopen(arquivo, "r");
    if(pFile != NULL){
      fclose(pFile);
      break;
    }
    printf("Arquivo invalido desejar informa outro arquivo? Digite s para sim e n para sair da aplicação");
    while(1){
      char confirmaSair;
      scanf(" %c", &confirmaSair);
      if((confirmaSair == 'n') || (confirmaSair == 'N')){
        return 0;
      }
      else if((confirmaSair == 's') || (confirmaSair == 'S')){
        break;
      }
      else{
        printf("Opcao invalida\n");
      }
      printf("desejar informa outro arquivo? Digite s para sim e n para sair da aplicação\n");
    }
    printf("Informe o arquivo que desejar traduzir: ");
    scanf(" %[^\n]s", arquivo);
  }
  PrimeiroPasso(arquivo, enderecos);
  //Para teste
  printf("%s: %s\n", enderecos[0].endereco, enderecos[0].binario);
  printf("%s: %s\n", enderecos[1].endereco, enderecos[1].binario);
  printf("%s: %s\n", enderecos[2].endereco, enderecos[2].binario);
  return 0;
}


//Subrotina para executar o primeiro passo do montador
void PrimeiroPasso(char arquivo[], Endereco enderecos[]){
  FILE *pFile = fopen(arquivo, "r+");
  int linhaDoc = 0;
  int ctrlVetorStruct = 0;
  while(!feof(pFile)){
    char bufferAux = fgetc(pFile);
    printf("%c\n", bufferAux);
    if(bufferAux == '_'){
      int n = 1;
      char enderecoAux2[100];
      enderecoAux2[0] = '_';
      while(1){
        char buffer;
        buffer = fgetc(pFile);
        if(buffer == ':'){
          char enderecoAux[10];
          int aux = linhaDoc*2;
          enderecoAux2[n] = '\0';
          strcpy(enderecos[ctrlVetorStruct].endereco, enderecoAux2);
          ConvertDecimalToBinario(aux,enderecoAux);
          strcpy(enderecos[ctrlVetorStruct].binario, enderecoAux);
          printf("%s: %s\n", enderecos[ctrlVetorStruct].endereco, enderecos[ctrlVetorStruct].binario);
          ctrlVetorStruct++;
          break;
        }
        else if(buffer == '\n'){
          linhaDoc++;
          break;
        }
        else{
          enderecoAux2[n] = buffer;
          n++;
        }
      }
    }
      else if(bufferAux == '\n'){
        linhaDoc++;
      }
  }
  fclose(pFile);
  return;
}

//Função de conversão de decimal para binário, necessária para converter e construir um os instruções
void ConvertDecimalToBinario(int num, char endereco[10]){
  int n = 8;
  int resto;
  while(1){
    endereco[n] = '0' + num%2;
    num = num/2;
    n--;
    if((num == 1) || (num == 0)){
      endereco[n] = '0'+ num;
      n--;
      if(n >= 0){
        int i = 0;
        while(i <= n){
          endereco[i] = '0';
          i++;
        }
      }
      endereco[9] = '\0';
      return;
    }
  }
} 

Obrigado [ ]s