Fernando Mercês Postado Fevereiro 20, 2019 em 11:36 Compartilhar Postado Fevereiro 20, 2019 em 11:36 Pessoal, Surgiu essa dúvida nos comentários de uma aula do CERO e achei legal de colocar aqui pra gente juntar ideias. Acontece que sabemos que EAX pode ter seus 16 bits mais baixos acessados através de AX e este, por sua vez, permite acesso a seus 8 bits mais baixos (AL) e os 8 bits mais altos também (AH). Sendo assim, se EAX = 0x12345678, então: AX = 0x5678 AH = 0x56 AL = 0x78 Como acessar somente o 0x1234? Na reposta ao usuário que perguntou, expliquei que não existe forma de acesso direta na arquitetura para estes 16 bits mais altos de EAX, ou de qualquer outro registrador, mas daria pra pegar esse valor com outras instruções, por exemplo: MOV EAX, 0x12345678 MOV EBX, 0xFFFF0000 AND EBX, EAX SHR EBX, 0x10 No código acima faço um AND do valor de EAX, que é 0x12345678 com 0xFFFF0000. Isso vai fazer com que EBX contenha 0x12340000. Aí basta empurrar os bits dezesseis (0x10) vezes para a direita com a instrução SHR e pimba, teremos 0x00001234 em EBX, que é o valor que queríamos recuperar de EAX. No entanto eu fiquei com a sensação de que há mais maneiras, provavelmente mais rápidas de se fazer isso. Ideias? Postem aqui para estudarmos! ? Grande abraço! Link para o comentário Compartilhar em outros sites More sharing options...
braskinha Postado Fevereiro 20, 2019 em 17:46 Compartilhar Postado Fevereiro 20, 2019 em 17:46 Muito bom!! Esclareceu e MUITO minha dúvida! Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Fevereiro 21, 2019 em 16:45 Compartilhar Postado Fevereiro 21, 2019 em 16:45 O AND é desnecessário. SHR fará o shift para direita sem considerar o sinal (preenchendo com zeros à esquerda) descartará os bits inferiores... Se quiser considerar o sinal poderá usar SAR (Shift Arithmetic to Right). Essas duas funções são EXATAMENTE iguais, depois de otimizadas: unsigned int hiword(unsigned int x) { return x >> 16; } unsigned int hiword2(unsigned int x) { return (x >> 16) & 0xffffU; } O que não há diferença é entre SHL e SAL (são a mesma instrução), já que ambos preencherão com 0 à direita... Realmente, SHR é o método mais eficiente. PS: Em C o shift para direita com valores sinalizados é dependente de implementação. Geralmente o compilador usará um SAR, mas pode ser que use um SHR.. Por isso é sempre bom usar inteiros unsigned, nem que tenha que fazer um casting... Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Fevereiro 21, 2019 em 18:42 Autor Compartilhar Postado Fevereiro 21, 2019 em 18:42 Nossa, não tinha pensado nisso, @fredericopissarra. Faz todo sentido, bastar o shift. ? Mas também dá pra fazer usando máscaras de bits e AND/OR/XOR ou algo assim não dá? Tipo sem o shift? Abraço e muito obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Fevereiro 22, 2019 em 00:12 Compartilhar Postado Fevereiro 22, 2019 em 00:12 5 horas atrás, Fernando Mercês disse: Mas também dá pra fazer usando máscaras de bits e AND/OR/XOR ou algo assim não dá? Tipo sem o shift? Não vejo como... Uma possibilidade, mas bem mais lenta, é fazer algo assim: sub rsp,8 mov [rsp],eax mov ax,[rsp+2] and eax,0xffff ; Se precisar zerar os 16 bits superiores. add rsp,8 Sem shifts! :) Link para o comentário Compartilhar em outros sites More sharing options...
void_ Postado Fevereiro 22, 2019 em 06:35 Compartilhar Postado Fevereiro 22, 2019 em 06:35 Sei que não tem exatamente a ver, mas me lembrou aquele problema de afetar todo um registrador de 64 bits ao escrever nos 32 bits menos significativos dele, como por exemplo executar MOV EAX, -1 que acaba preenchendo todo o RAX com uns). Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Fevereiro 22, 2019 em 09:24 Compartilhar Postado Fevereiro 22, 2019 em 09:24 Aliás... um excelente livro cheio dessas "manhas": Hacker's Delight de Henry S. Warren Jr (aqui). Link para o comentário Compartilhar em outros sites More sharing options...
void_ Postado Fevereiro 22, 2019 em 10:04 Compartilhar Postado Fevereiro 22, 2019 em 10:04 39 minutos atrás, fredericopissarra disse: Aliás... um excelente livro cheio dessas "manhas": Hacker's Delight de Henry S. Warren Jr (aqui). Pode colocar link de pdf de livro aqui? Não sabia ? P.S: Valeu pelo livro. Vou baixar. Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Fevereiro 22, 2019 em 10:24 Compartilhar Postado Fevereiro 22, 2019 em 10:24 19 minutos atrás, void_ disse: Pode colocar link de pdf de livro aqui? Não sabia ? P.S: Valeu pelo livro. Vou baixar. O link tá ai... é só clicar... ? É esse "aqui" entre parenteses... ? Link para o comentário Compartilhar em outros sites More sharing options...
void_ Postado Fevereiro 22, 2019 em 10:40 Compartilhar Postado Fevereiro 22, 2019 em 10:40 14 minutos atrás, fredericopissarra disse: O link tá ai... é só clicar... ? É esse "aqui" entre parenteses... ? Sim. O que eu quis dizer é que eu não sabia que podia soltar pdf aqui. Achei que fosse contra as regras, ou algo assim. Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Fevereiro 22, 2019 em 11:57 Compartilhar Postado Fevereiro 22, 2019 em 11:57 1 hora atrás, void_ disse: Sim. O que eu quis dizer é que eu não sabia que podia soltar pdf aqui. Achei que fosse contra as regras, ou algo assim. Well... isso eu também não sei! Se bem que as regras (https://www.mentebinaria.com.br/guidelines/) só fala de "pirataria de software" (PDF não é software! hehe)... ? É só reclamarem que tiro o link... Link para o comentário Compartilhar em outros sites More sharing options...
void_ Postado Fevereiro 23, 2019 em 03:50 Compartilhar Postado Fevereiro 23, 2019 em 03:50 Se for permitido é bom eu saber, porque eu consegui uns pdfs bem legais aqui e gostaria de compartilhar. Link para o comentário Compartilhar em outros sites More sharing options...
Aof Postado Fevereiro 27, 2019 em 19:48 Compartilhar Postado Fevereiro 27, 2019 em 19:48 Em 22/02/2019 em 07:57, fredericopissarra disse: só fala de "pirataria de software" (PDF não é software! hehe)... ? sempre tem uma vuln nao e verdade@fredericopissarra ? hehehe. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.