Ir para conteúdo

Fernando Mercês

Administradores
  • Postagens

    1.510
  • Registro em

  • Última visita

  • Dias Ganhos

    164

Posts postados por Fernando Mercês

  1. Oi Lucas. Esse é o mesmo problema postado aqui? Se for, por favor, atualize o tópico lá para podermos apagar este. Não é legal criar vários tópicos sobre o mesmo assunto. ?

    Em tempo, postar o enunciado do exercício e esperar a resposta não funciona. Raramente alguém vai dedicar tempo pra fazer o exercício por você, afinal, o estudante de programação é você. ?

    É preciso postar o seu código e explicar onde exatamente está sua dúvida, o erro que dá, etc. Aí a galera ajuda. ˆˆ

    Um abraço e bons estudos!

  2. Isso acontece por conta da ordem das coisas. No comando "dir > dir.txt", três coisas acontecem, nessa ordem:

    1. Um arquivo dir.txt é criado vazio (por conta do redirecionador "> dir.txt").
    2. O comando dir roda e lê todo o conteúdo do diretório, que tem o dir.txt vazio neste momento.
    3. Ao tentar imprimir o que leu, o cmd redireciona a saída padrão para o arquivo dir.txt, que ainda tá vazio, mas agora terá a saída do comando dir já pronta no passo anterior.

    A única forma que conheço é usar outro diretório. Isso não resolve o problema paradoxal que você apresentou. Creio que não haja solução para considerar o tamanho do dir.txt porque ele só é preenchido depois que o comando dir roda, o que cria o paradoxo que você falou.

    Abraço! 

  3. Escolaridade:

    Graduação completa em Ciência da Computação, Engenharia da Computação, Engenharia Elétrica e/ou áreas correlatas;


    Experiência:

    Desenvolvimento de drivers para Sistema Operacional Windows ou Linux, desenvolvimento para sistemas embarcados;
    Conhecimento de Linux embarcado, conhecimento em criptografia simétrica, assimétricas, algoritmos de hash e protocolos criptográficos, como por exemplo TLS, conhecimento sobre protocolos RS232, RS485, CAN, etc;
    Conhecimentos em desenvolvimento para módulos de BIOS e/ou linguagem assembly serão considerados diferenciais.


    Link para mais detalhes: https://lnkd.in/e8WteT2B

  4. Oi Paula. Entendi. Bem, neste caso recomendo que peça ajuda aos seus colegas e professores ou estude por algum livro. Se alguém que já sabe programar fizer este programa, aí você não aprende a programar. E só tem uma maneira de se aprender a programar: programando. ?

    Aqui tem bastante material (essa apostila da UFMG é um ótimo início): https://www.mentebinaria.com.br/studying-materials/registros/cc/

    Não sei quanto tempo você tem para resolver o exercício. Já tem um ambiente funcionando com compilador e tudo mais? Consegue fazer um "Hello, word" simples e já testar?

    Valeu!

  5. Oi Nicholas. Acho que seu único equívoco é achar que precisa saber o tamanho do de stdin antes. ?

    A real é que como você não sabe quantos bytes receberá de entrada, vai precisar alocar memória dinamicamente. Uma abordagem possível é:

    1. Alocar um buffer qualquer.
    2. Realocá-lo em 256 bytes (aumentá-lo nessa quantidade).
    3. Ler 256 bytes para este buffer.
    4. Equanto o número de bytes lidos for positivo, ir para 2.

    No final você terá um buffer com todo o conteúdo de stdin.

    Não sei se esta é a melhor opção, no entanto.

    Abraço!

  6. Em 08/07/2021 em 19:06, PmoshBR disse:

    Obrigado pela ajuda, não conhecia o IDR... foi rodar ele e achar na hora a localização da String, muito bom esse software...

    De nada. É, pra Delphi acho que é o melhor.

    Em 08/07/2021 em 19:06, PmoshBR disse:

    Agora só falta uma coisa, qual programa posso usar para alterar a string e salvar o exe corrigido? pois a quantidade de caracteres não são iguais... teria que alterar o tamanho do arquivo...

    Não precisa de outro programa. Dá pra encontrar uma code cave com o próprio x64dbg. No canal temos um vídeo sobre injeção de código, mas serve para injeção de dados também:

    Se não houver "holes" utilizáveis (o que é raro), dá pra criar uma seção também (assunto coberto no vídeo da parte 2).

    Mas não deixa de seguir o CERo até o final. Tu vai curtir!

    Abraço e boa sorte!

  7. Humm.. neste caso em específico eu acho mais fácil criar um registro para o SERVIDOR no DNS interno e simplesmente mapear producao$ para o novo lugar. Assim nem precisa alterar o programa. ?

    Se realmente for partir pra engenharia reversa, bem, já passei por um caso parecido. Eu diria que sua linha de pensamento de buscar a string no executável está certa. O que eu faria:

    1. Usaria o IDR para buscar o endereço do evento BtAdicionarClick.
    2. Usaria o x64dbg para colocar um breakpoint no endereço conseguido no passo acima.
    3. Seguiria a execução até encontrar onde a string é carregada.

    Certamente o CERO vai te ajudar. Se preferir ler, tem o livro gratuito Fundamentos de Engenharia Reversa também.

    Se tiver dúvidas durante o processo, pode postar aqui que a galera ajuda (screenshots, trechos de código, etc são bem vindos). ?

    Abraço e boa sorte!

     

  8. Código interessante! Acho que o @Felipe.Silva vai curtir também! Ele publicou um artigo recentemente sobre alocação de memória aqui no Mente Binária. :)

    Marta, ao que me parece, sua myFree() não está funcionando. Criei uma main() básica:

    int main(void) {
    	int *p = myMalloc(sizeof(int));
    	scanf("%d", p);
    	printf("Before freeing it: %d\n", *p);
    	myFree(p);
    	printf("After freeing it: %d\n", *p);
    	return 0;
    }

    E o conteúdo de p é impresso na tela, mesmo depois da chamada à myFree():

    % ./marta <<< 42
    Before freeing it: 42
    After freeing it: 42

    Em que momento você recebe um runtime error?

     

    Abraço,

    Fernando

  9. 17 horas atrás, Gin News disse:

    Peço desculpas pelo jeito que eu botei o código no post, sou meio tanso com essas coisas...

    Imagina. Foi uma sugestão mesmo, pra ficar melhor pra todos. Tá tudo certo. ;)

    17 horas atrás, Gin News disse:

    eu queria saber como esse código funciona por inteiro mesmo

    Acho que neste caso precisaria ser alguém que conheça de Arduino. Eu não sei o que são essas DDRD, PORTC, etc. Você sabe? Talvez ajude relembrar os operadores em C. Por exemplo, o código abaixo:

    PORTD |= (1<<3); 

    É o mesmo que:

    PORTD = PORTD | 8;

    Ou seja, é uma operação OU do valor desta variável/porta com "1 com 3 bits deslocados para a esquerda", que dá no mesmo que "multiplicar por 2 três vezes", que seria 1x2x2x2 que é igual a 8. O resultado é atualizado na própria variável/porta. Os links vão te ajudar a entender. Agora a razão pela qual o código faz isso, não sei te dizer. :(

    Vou ver se consigo ajuda de alguém que entenda de Arduino.

    Abraço,

    Fernando

  10. Opa! Seria legal você editar seu post pra formatar seu código como código (é o botão com os símbolos <> aqui no editor) e usar a opção de realce de sintaxe em C. Porque aí fica assim ó:

    unsigned int i,n,k,d,y;
    unsigned long previousTime = 0;
    
    byte hours = 12;    // start time
    byte minutes = 15;
    byte seconds = 00;
    
    int val;
    
    void setup() 
    {
      DDRD = 0xFE;
      DDRB = 0xFF;
      DDRC = 0xFE;
      PORTC = 0x01;  
      PORTD = 0x03;
      PORTB = 0x00;
      
      if(hours == 12)
      hours = 0;
    }

    Muito melhor de ler. :)

    Sobre o programa em si, a sua dúvida é aonde exatamente? Qual parte do código que você não entendeu?

    Abraço,

    Fernando

  11. Avançou bem! :)

    Algumas observações aí:

    • Você não precisa desse "funcionário fantasma" (kkkkk) só pra manter a soma. Basta uma variável do tipo int (que precisa ser declarada na main) e no final do segundo loop você pode fazer algo como soma = soma + func[i].salario;
    • No seu printf no final você tá assumindo que o primeiro elemento do array (vetor) func tá na posição 1, mas na verdade arrays em C começam em zero, logo, o primeiro elemento é func[0] e o segundo é func[1].
    • Ainda no printf, parece que tem mais "percents" do que variáveis para substituí-los. Confere aí. O número de "percents" tem que ser igual ao número de argumentos depois dessa string que tem os "percents".
    • Uma dica pra ajudar a não se perder é pular linha no printf pra deixar mais legível. C permite isso. Só prestar atenção nas vírgulas e não esquecer de fechar parênteses no fim. Tipo:
    printf("%s : R$ %d\n%s : R$ %d\n",
           func[0].nome, func[0].salario,
           func[1].nome, func[1].salario);

    Boa sorte!

  12. Olá!

    Que bom que você está tentando. Vira e mexe aparecem pessoas aqui que só querem as repostas. O problema disso é que não aprendem. :(

    Indo ao assunto, bom, você vai precisar adicionar uma função. No momento o seu programa só tem uma função, a main. Para completar esse exercício você vai precisar de mais uma, que o exercício já te dá o nome, salarioCargo. Ela retorna o total pago, então você já sabe que o retorno da função é do tipo int (já que tá usando este tipo para o salário no programa todo). A função recebe 2 parâmetros: um vetor para a estrutura de funcionários e uma string. A declaração então ficaria mais ou menos assim:

    int salarioCargo(Funcionario *funcionarios, char *cargo) {
      // seu código daqui
    }

    No código, você vai precisar iterar (usando um loop, tipo for ou while) pelo vetor de funcionários e comparar seus cargos com o cargo passado para a função. A partir daí somar os valores de seus salários.

    Pontos importantes:

    • Na main, o jeito como você tá preenchendo as informações dos 5 funcionários é pouco otimizado. Seria melhor declarar um vetor de funcionários e fazer um loop para preencher as informações deles (for i=0; i<5; i++). Assim você já vai ter o vetor pra passar pra função salarioCargo também.
    • O exercício é seu, por isso por favor, nunca peça para alguém fazê-lo (não to dizendo que você fez isso - pelo contrário, você não fez, mas só deixando claro que ninguém vai fazer pra você, afinal você é a futura programadora que está se formando e o mercado vai contar com você ☺️).
    • Pode contar com a gente para todas as suas dúvidas.
    • Pode ser que você precise revisitar suas notas, reler livros etc para entender sobre funções, arrays (vetores), ponteiros e loops para completar este exercício.

    Abraço,

    Fernando

  13. Opa!

    O exercício é esse mesmo! A coluna que você destacou exibe a posição dos bytes em grupos de 16 bytes. Analisemos a posição 0x210 por exemplo. Nela, há o byte 0x58. Já na posição 0x211, temos o byte 0x03, entende? Vai contando pra direita de um em um. ?

    Quando chegar no fim da linha, no caso da linha da posição 0x210, será o byte na posição 0x21F, que é 0x00. O próximo já é a posição 0x220, que é o byte 0x44. E assim segue...

    E aí. Qual é o byte na posição 0x2f4? ?

    Abraço!

×
×
  • Criar Novo...