Página 1 de 2

Como editar um .obj?

Enviado: 31 Jan 2008 22:00
por Tim9
Alguém conhece alguma ferramenta para editar um .OBJ ?
Aguardo antecipando os meus mais sinceros agradecimentos por qualquer dica.

Enviado: 31 Jan 2008 22:07
por Maligno
Tenho 99,9% de certeza de que não existe ferramenta alguma que permita uma reorganização dos dados internos de um objeto, seja do tipo que for (são 2).
Mas se a alteração almejada for "leve", que não "deforme" o objeto original, pode-se fazer alguma coisa por meio de um editor hexa comum. Depende do quê exatamente você pretende fazer.

Enviado: 01 Fev 2008 09:36
por Euclides
Oi, Tim9
Depende do que deseja ser alterado...
Os .OBJ podem ser descompilados, alterados e recompilados.
Passe mais detalhes...
T+
Euclides

Enviado: 01 Fev 2008 20:40
por Tim9
Obrigado pela atenção,

Euclides vc me deixou bastante animado, o que quero é exatamente descompilar, alterar e recompilar. Vc pode me dizer apenas como descompilar, isto é, com qual ferramenta?

Mais uma vez grato e aguardo.

Enviado: 01 Fev 2008 21:24
por Maligno
Euclides vc me deixou bastante animado, o que quero é exatamente descompilar
Ah, deveria ter dito isso desde o começo. Descompilar um programa é muito diferente de editar objeto.

Mas é coisa simples. SE o objeto foi compilado pelo Clipper, apenas crie um programa mínimo que de alguma forma inclua esse objeto (alguma função dele), mas usando o RTLink pra montar o EXE. Depois é só usar o Valkyrie e descompilar. Tenho no meu site. Clique aqui.

Enviado: 02 Fev 2008 13:06
por Tim9
Oi Maligno vc é 10 uma assumidade na matéria tanto em quantidade quanto em qualidade, parabéns mais uma vez pela sua predisposição em ajudar a nós de menor conhecimento, desculpe, realmente quero editar, mas na minha ignorância fiquei animado pois pensei que o Euclides teria uma ferramenta para descompilar o .OBJ que gerava um .SRC como o V5 faz com o .EXE.

Vou relatar passo-a-passo o desafio que tenho e da ajuda que preciso:

01. Tenho um .EXE e .OBJ mas não tenho o .PRG
02. Descompilei o .EXE com o V5 e ele gerou o .SRC que renomeei p/ .PRG
03. Antes de fazer qualquer alteração compilei com o Blinker e deu o seguinte erro:

TIM.PRG(4101) Error C2021 Redefinition of procedure or function: 'SKIPPED' 1 error no code generated

04. Renomeei uma das funções e a linha que a chamava para skipped2, aí na compilação dá o seguinte erro:

SET CLIPPERCMD=/M /Q
Clipper TIM
294K available
Compiling TIM.PRG
Code size 73233, Symbols 11968, Constants 27999
BLINKER @TIM.LNK
BLINKER : 1115 : TIM.OBJ(TIM) : 'NATIONMSG' : unresolved external
BLINKER : 0 Warning error(s), 1 Fatal error(s)
TIM.EXE (not created) (0.2 seconds)

05. Não sei como resolver esse problema de NATIONMSG

06. Só por curiosidade compilei o .OBJ que já tinha em mãos com o RTLINK aí ele gera o .EXE embora com a mensagem abaixo:

.RTLink for Clipper Dynamic Overlay Linker / Pre-Linker Version 3.14B
(C) Copyright Pocket Soft Inc., 1988-1991. All Rights Reserved.


UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
SYMBOL FIRST REFERENCE
------ ---------------
'NATIONMSG' TIM.OBJ

warning wrt0022: .EXE may not execute properly -- undefined symbols
232K
1 warning message(s)


Bem o desafio está lançado e preciso de ajuda.
Qualquer dica será bem-vinda.
Aguardo e agradeço.

Enviado: 02 Fev 2008 13:24
por Maligno
Estranho. Esse símbolo NATIONMSG é uma função que está presente na biblioteca CLIPPER.LIB e por isso, não deveria dar erro na linkedição. Como é o script que você usou no BLinker pra remontar o EXE?

Um detalhe: tome cuidado com o que descompila com o Valkyrie, pois ele também descompila o que já é parte da biblioteca padrão do Clipper. Então você precisa separar as coisas e, quando for remontar o EXE, utilizar apenas aquilo que é parte do projeto da aplicação, excluindo o que é do Clipper mesmo.

Enviado: 02 Fev 2008 17:44
por Tim9
Para recompilar a saida do valkyrie fiz assim:

01. criei o C.BAT contendo:
RMAKE TIM
// eof //

02. criei o Tim.RMK contendo:
.prg.obj:
SET CLIPPERCMD=/M /Q
Clipper $*

TIM.OBJ : TIM.PRG

TIM.EXE :
BLINKER @TIM.LNK
// eof //

03. Criei o Tim.Lnk contendo:
BLINKER INCREMENTAL OFF
BLINKER DEMONSTRATION DATE 2008/02/25
BLINKER EXECUTABLE CLIPPER //F:250 //DYNF:8 //SWAPK:65535 //SWAPPATH:"C:\" //TEMPPATH:"C:\"
BLINKER PROCEDURE DEPTH 140
#BLINKER EXECUTABLE NODELETE
BLINKER OVERLAY OPSIZE 0
BLINKER EXECUTABLE COMPRESS 1
BLINKER EXECUTABLE EXTEND
stack 7068

MAP S,A

FI TIM

SEARCH BLXCLP52
SEARCH blxmsc51.lib
LIB BLXRATEX.lib
LIB EXTEND.LIB, CTP.LIB, VL2.LIB

OUT TIM

// eof //

Maligno, como não sou um expert como vc, este é um tamplete que utilizo para compilar todos os meus programas.

Agradeço imensamente a sua indispensável ajuda.

Aguardo.

Enviado: 02 Fev 2008 23:00
por Clipper
Como descompilador acho o RESCUE melhor de usar, o código descompilado com ele fica mais limpo, inclusive ele já gera o RMK, mas sem dúvida o caminho é esse que o Maligno ensinou, já utilizei esse método inclusive para descompliar algumas funções de LIBs.

Até logo.

Marcelo

Enviado: 03 Fev 2008 00:49
por rochinha
Amiguinho

Por acaso o .OBJ foi gerado com a mesma versão do Clipper que vc esta usando para compilar?

Se vc olhar no diretório do Clipper encontrará .OBJ ou .LIB que tem relação com NATIONMSG que ná verdade são relacionados as mensagens de erro do Clipper, ou seja, se voce recebe mensagens de erro em Ingles basta adiocionar um dos .OBJ la existentes que devolva as mensagens em Portugues.

Agregue ao seu .LNK e tudo resolvido.

como editar un .obj?

Enviado: 03 Fev 2008 01:29
por Adalberto
NationMsg e uma função chamada pelo GetSys.Prg, eu tenho a mesma falha e ainda estou procurando solução, agradeço qualquer ajuda.

Enviado: 03 Fev 2008 05:21
por Clipper
Seguinte Galera :

A charada foi morta pelo Rochinha.

Na pasta OBJ do Clipper tem vários arquivos MSG, basta então compilar junto com a aplicação o correspondente ao idioma, no caso do português é MSGPOR.OBJ, não fiz o teste mas creio que deve desaparecer o problema, este arquivo serve para fazer algumas conversões de idioma para mensagens do clipper e uso com algumas funções.

Até logo.

Marcelo

Enviado: 03 Fev 2008 05:39
por Clipper
Fiz o seguinte programa teste.

CLS
@ 05,00 SAY CDOW(DATE())
@ 06,00 SAY CMONTH(DATE())
RETURN

Linkei das seguintes formas

RTLINK FI TESTE,MSGPOR
RTLINK FI TESTE,MSGSWE
RTLINK FI TESTE,MSGITA
RTLINK FI TESTE

No caso 1 (português) - O resultado na tela foi :
Domingo
Fevereiro

No caso 2 (suéco) - O resultado na tela foi :
sôndag
februari
Exatamente assim, tudo minúsculo.

No caso 3 (italiano) - O resultado na tela foi :
Domenica
Febbraio

No caso 4 (default) - O resultado na tela foi :
Sunday
February

O iteressante é que linkando com o MSGPOR dá a seguinte mensagem no final :

.RTLink for Clipper Dynamic Overlay Linker / Pre-Linker Version 3.14B
(C) Copyright Pocket Soft Inc., 1988-1991. All Rights Reserved.

warning wrt0011: Public symbol '__nversion' doubly defined

UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
SYMBOL FIRST REFERENCE
------ ---------------
'__natmsgver' CLIPPER.LIB

warning wrt0022: .EXE may not execute properly -- undefined symbols
140K
2 warning message(s)

Mas funciona perfeitamente.

Até logo.

Marcelo

Enviado: 03 Fev 2008 09:16
por Maligno
Imagino que o seu fonte TIM.PRG é aquele cujo fonte veio pelo Valkyrie. Então, se for mesmo, acredito que a etapa de descompilação foi vencida.

Código: Selecionar todos

BLINKER INCREMENTAL OFF
BLINKER DEMONSTRATION DATE 2008/02/25
BLINKER EXECUTABLE CLIPPER //F:250 //DYNF:8 //SWAPK:65535 //SWAPPATH:"C:\" //TEMPPATH:"C:\"
BLINKER PROCEDURE DEPTH 140
#BLINKER EXECUTABLE NODELETE
BLINKER OVERLAY OPSIZE 0
BLINKER EXECUTABLE COMPRESS 1
BLINKER EXECUTABLE EXTEND 
stack 7068

MAP S,A

FI TIM

SEARCH BLXCLP52
SEARCH blxmsc51.lib   
LIB BLXRATEX.lib      
LIB EXTEND.LIB, CTP.LIB, VL2.LIB

OUT TIM
Nesse script vejo um erro e alguns exageros. Aquilo que acredito ser exagero está nos comandos que, aparentemente, devido à simplicidade do projeto, não tem cabimento. São os comandos BLINKER DEMONSTRATION, PROCEDURE DEPTH e OVERLAY. Esse último nem faz sentido quando se monta um EXE para o modo protegido. O BLinker simplesmente o ignora. O comando STACK só deve ser usado se realmente for necessário. Remova. Se der problema, pode-se pensar em incluí-lo novamente, conforme o erro apresentado.

Também é exagero incluir a biblioteca EXTEND.LIB, que é "default" para o Clipper. Ela não precisa ser mencionada, pois o Clipper, ao montar o objeto, já instrui o linker a procurar por esta biblioteca. Portanto, mencioná-la no script é desperdício de espaço.

Por fim, o erro é a mistura de bibliotecas para o modo protegido: BLXCLP52 (esta é correto incluir, desde que seu Clipper seja da versão 5.2), BLXMSC51 (nada a ver com Clipper) e BLXRATEX (muita gente usa mas ninguém nunca justificou seu uso). Essa última eu nunca usei e nunca fez falta. Então, remova as bibliotecas BLXMSC51 e BLXRATEX.

Dica para o uso do BLinker: nunca use qualquer comando cuja finalidade você não conhece. Pra isso existe o manual. Leia e conheça seus recursos. A partir daí você passará a tirar um melhor proveito dele. Aliás, essa dica serve pra tudo relacionado à programação. Manual, para o programador, é como sapato para a mulher. Tem que ter de monte. E tem que usar. :)

Recompile e veja no que dá.

Enviado: 03 Fev 2008 13:54
por rochinha
Amiguinhos

Por isto ainda guardo meus antigos livros Tom Retting Library e Ramalho Séries, além de todos os NGs que pude encontrar.